1 line
633 KiB
Plaintext
1 line
633 KiB
Plaintext
{"version":3,"file":"reveal.js","sources":["../node_modules/core-js/internals/global.js","../node_modules/core-js/internals/fails.js","../node_modules/core-js/internals/descriptors.js","../node_modules/core-js/internals/function-bind-native.js","../node_modules/core-js/internals/function-call.js","../node_modules/core-js/internals/object-property-is-enumerable.js","../node_modules/core-js/internals/engine-v8-version.js","../node_modules/core-js/internals/create-property-descriptor.js","../node_modules/core-js/internals/function-uncurry-this.js","../node_modules/core-js/internals/classof-raw.js","../node_modules/core-js/internals/indexed-object.js","../node_modules/core-js/internals/require-object-coercible.js","../node_modules/core-js/internals/to-indexed-object.js","../node_modules/core-js/internals/is-callable.js","../node_modules/core-js/internals/is-object.js","../node_modules/core-js/internals/get-built-in.js","../node_modules/core-js/internals/object-is-prototype-of.js","../node_modules/core-js/internals/engine-user-agent.js","../node_modules/core-js/internals/native-symbol.js","../node_modules/core-js/internals/use-symbol-as-uid.js","../node_modules/core-js/internals/is-symbol.js","../node_modules/core-js/internals/try-to-string.js","../node_modules/core-js/internals/a-callable.js","../node_modules/core-js/internals/get-method.js","../node_modules/core-js/internals/ordinary-to-primitive.js","../node_modules/core-js/internals/set-global.js","../node_modules/core-js/internals/shared-store.js","../node_modules/core-js/internals/shared.js","../node_modules/core-js/internals/to-object.js","../node_modules/core-js/internals/has-own-property.js","../node_modules/core-js/internals/uid.js","../node_modules/core-js/internals/well-known-symbol.js","../node_modules/core-js/internals/to-primitive.js","../node_modules/core-js/internals/to-property-key.js","../node_modules/core-js/internals/document-create-element.js","../node_modules/core-js/internals/ie8-dom-define.js","../node_modules/core-js/internals/object-get-own-property-descriptor.js","../node_modules/core-js/internals/v8-prototype-define-bug.js","../node_modules/core-js/internals/an-object.js","../node_modules/core-js/internals/object-define-property.js","../node_modules/core-js/internals/create-non-enumerable-property.js","../node_modules/core-js/internals/inspect-source.js","../node_modules/core-js/internals/internal-state.js","../node_modules/core-js/internals/native-weak-map.js","../node_modules/core-js/internals/shared-key.js","../node_modules/core-js/internals/hidden-keys.js","../node_modules/core-js/internals/function-name.js","../node_modules/core-js/internals/redefine.js","../node_modules/core-js/internals/to-integer-or-infinity.js","../node_modules/core-js/internals/to-absolute-index.js","../node_modules/core-js/internals/to-length.js","../node_modules/core-js/internals/length-of-array-like.js","../node_modules/core-js/internals/array-includes.js","../node_modules/core-js/internals/object-keys-internal.js","../node_modules/core-js/internals/enum-bug-keys.js","../node_modules/core-js/internals/object-get-own-property-names.js","../node_modules/core-js/internals/object-get-own-property-symbols.js","../node_modules/core-js/internals/own-keys.js","../node_modules/core-js/internals/copy-constructor-properties.js","../node_modules/core-js/internals/is-forced.js","../node_modules/core-js/internals/export.js","../node_modules/core-js/internals/object-keys.js","../node_modules/core-js/internals/object-assign.js","../node_modules/core-js/modules/es.object.assign.js","../node_modules/core-js/internals/function-bind-context.js","../node_modules/core-js/internals/is-array.js","../node_modules/core-js/internals/to-string-tag-support.js","../node_modules/core-js/internals/classof.js","../node_modules/core-js/internals/is-constructor.js","../node_modules/core-js/internals/array-species-constructor.js","../node_modules/core-js/internals/array-species-create.js","../node_modules/core-js/internals/array-iteration.js","../node_modules/core-js/internals/array-method-has-species-support.js","../node_modules/core-js/modules/es.array.map.js","../node_modules/core-js/internals/object-to-string.js","../node_modules/core-js/modules/es.object.to-string.js","../node_modules/core-js/internals/create-property.js","../node_modules/core-js/modules/es.array.concat.js","../node_modules/core-js/internals/native-promise-constructor.js","../node_modules/core-js/internals/redefine-all.js","../node_modules/core-js/internals/a-possible-prototype.js","../node_modules/core-js/internals/object-set-prototype-of.js","../node_modules/core-js/internals/set-to-string-tag.js","../node_modules/core-js/internals/set-species.js","../node_modules/core-js/internals/an-instance.js","../node_modules/core-js/internals/iterators.js","../node_modules/core-js/internals/is-array-iterator-method.js","../node_modules/core-js/internals/get-iterator-method.js","../node_modules/core-js/internals/get-iterator.js","../node_modules/core-js/internals/iterator-close.js","../node_modules/core-js/internals/iterate.js","../node_modules/core-js/internals/check-correctness-of-iteration.js","../node_modules/core-js/internals/task.js","../node_modules/core-js/internals/a-constructor.js","../node_modules/core-js/internals/species-constructor.js","../node_modules/core-js/internals/function-apply.js","../node_modules/core-js/internals/html.js","../node_modules/core-js/internals/array-slice.js","../node_modules/core-js/internals/engine-is-ios.js","../node_modules/core-js/internals/engine-is-node.js","../node_modules/core-js/internals/microtask.js","../node_modules/core-js/internals/engine-is-ios-pebble.js","../node_modules/core-js/internals/engine-is-webos-webkit.js","../node_modules/core-js/internals/new-promise-capability.js","../node_modules/core-js/internals/promise-resolve.js","../node_modules/core-js/internals/host-report-errors.js","../node_modules/core-js/internals/queue.js","../node_modules/core-js/modules/es.promise.js","../node_modules/core-js/internals/engine-is-browser.js","../node_modules/core-js/internals/perform.js","../node_modules/core-js/internals/dom-token-list-prototype.js","../node_modules/core-js/internals/array-method-is-strict.js","../node_modules/core-js/internals/array-for-each.js","../node_modules/core-js/modules/web.dom-collections.for-each.js","../node_modules/core-js/internals/dom-iterables.js","../node_modules/core-js/internals/call-with-safe-iteration-closing.js","../node_modules/core-js/internals/array-from.js","../node_modules/core-js/modules/es.array.from.js","../node_modules/core-js/internals/to-string.js","../node_modules/core-js/internals/string-multibyte.js","../node_modules/core-js/internals/object-define-properties.js","../node_modules/core-js/internals/object-create.js","../node_modules/core-js/internals/iterators-core.js","../node_modules/core-js/internals/correct-prototype-getter.js","../node_modules/core-js/internals/object-get-prototype-of.js","../node_modules/core-js/internals/create-iterator-constructor.js","../node_modules/core-js/internals/define-iterator.js","../node_modules/core-js/modules/es.string.iterator.js","../node_modules/core-js/internals/whitespaces.js","../node_modules/core-js/internals/string-trim.js","../node_modules/core-js/internals/string-trim-forced.js","../node_modules/core-js/modules/es.string.trim.js","../node_modules/core-js/internals/regexp-flags.js","../node_modules/core-js/internals/regexp-exec.js","../node_modules/core-js/internals/regexp-sticky-helpers.js","../node_modules/core-js/internals/regexp-unsupported-dot-all.js","../node_modules/core-js/internals/regexp-unsupported-ncg.js","../node_modules/core-js/modules/es.regexp.exec.js","../node_modules/core-js/internals/array-slice-simple.js","../node_modules/core-js/internals/object-get-own-property-names-external.js","../node_modules/core-js/internals/well-known-symbol-wrapped.js","../node_modules/core-js/internals/path.js","../node_modules/core-js/internals/define-well-known-symbol.js","../node_modules/core-js/modules/es.symbol.js","../node_modules/core-js/modules/es.symbol.description.js","../node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","../node_modules/core-js/internals/advance-string-index.js","../node_modules/core-js/internals/regexp-exec-abstract.js","../node_modules/core-js/modules/es.string.match.js","../node_modules/core-js/modules/es.array.splice.js","../node_modules/core-js/internals/is-regexp.js","../node_modules/core-js/modules/es.string.split.js","../node_modules/core-js/internals/inherit-if-required.js","../node_modules/core-js/internals/this-number-value.js","../node_modules/core-js/modules/es.number.constructor.js","../node_modules/core-js/modules/es.function.name.js","../node_modules/core-js/modules/es.array.join.js","../node_modules/core-js/internals/get-substitution.js","../node_modules/core-js/modules/es.string.replace.js","../node_modules/core-js/internals/same-value.js","../node_modules/core-js/modules/es.string.search.js","../js/utils/util.js","../js/utils/device.js","../node_modules/fitty/dist/fitty.module.js","../js/controllers/slidecontent.js","../js/controllers/slidenumber.js","../js/utils/color.js","../js/controllers/backgrounds.js","../node_modules/core-js/modules/es.object.keys.js","../node_modules/core-js/modules/es.array.filter.js","../node_modules/core-js/modules/es.array.slice.js","../js/utils/constants.js","../js/controllers/autoanimate.js","../node_modules/core-js/internals/array-sort.js","../node_modules/core-js/internals/engine-ff-version.js","../node_modules/core-js/internals/engine-is-ie-or-edge.js","../node_modules/core-js/internals/engine-webkit-version.js","../node_modules/core-js/modules/es.array.sort.js","../js/controllers/fragments.js","../js/controllers/overview.js","../js/controllers/keyboard.js","../js/controllers/location.js","../js/controllers/controls.js","../js/controllers/progress.js","../js/controllers/pointer.js","../node_modules/core-js/internals/object-to-array.js","../node_modules/core-js/modules/es.object.values.js","../js/utils/loader.js","../js/controllers/plugins.js","../node_modules/regenerator-runtime/runtime.js","../js/controllers/print.js","../js/controllers/touch.js","../js/controllers/focus.js","../js/controllers/notes.js","../node_modules/core-js/internals/array-fill.js","../node_modules/core-js/internals/add-to-unscopables.js","../node_modules/core-js/modules/es.array.fill.js","../js/components/playback.js","../js/config.js","../js/reveal.js","../js/index.js"],"sourcesContent":["var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar uncurryThis = NATIVE_BIND && bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? function (fn) {\n return fn && uncurryThis(fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n","var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n return typeof argument == 'function';\n};\n","var isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n","var global = require('../internals/global');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n try {\n return String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a function');\n};\n","var aCallable = require('../internals/a-callable');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.20.3',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2022 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.20.3/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","var global = require('../internals/global');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype != 42;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw TypeError(String(argument) + ' is not an object');\n};\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget(store, it) || {};\n };\n has = function (it) {\n return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","module.exports = {};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var name = options && options.name !== undefined ? options.name : key;\n var state;\n if (isCallable(value)) {\n if (String(name).slice(0, 7) === 'Symbol(') {\n name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n createNonEnumerableProperty(value, 'name', name);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- safe\n return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar call = require('../internals/function-call');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\nvar concat = uncurryThis([].concat);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n return classof(argument) == 'Array';\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var global = require('../internals/global');\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\n\nvar isConstructorModern = function isConstructor(argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, empty, argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy = function isConstructor(argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n }\n try {\n // we can't check .prototype since constructors produced by .bind haven't it\n // `Function#toString` throws on some built-it function in some legacy engines\n // (for example, `DOMQuad` and similar in FF41-)\n return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n } catch (error) {\n return true;\n }\n};\n\nisConstructorLegacy.sham = true;\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called = true; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n","var global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","var arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","var bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_REJECT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var length = lengthOfArrayLike(self);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\nvar TypeError = global.TypeError;\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n concat: function concat(arg) {\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = lengthOfArrayLike(E);\n if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) redefine(target, key, src[key], options);\n return target;\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument)) return argument;\n throw TypeError(\"Can't set \" + String(argument) + ' as a prototype');\n};\n","/* eslint-disable no-proto -- safe */\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","var defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (target, TAG, STATIC) {\n if (target && !STATIC) target = target.prototype;\n if (target && !hasOwn(target, TO_STRING_TAG)) {\n defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","var global = require('../internals/global');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it, Prototype) {\n if (isPrototypeOf(Prototype, it)) return it;\n throw TypeError('Incorrect invocation');\n};\n","module.exports = {};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return getMethod(it, ITERATOR)\n || getMethod(it, '@@iterator')\n || Iterators[classof(it)];\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n throw TypeError(tryToString(argument) + ' is not iterable');\n};\n","var call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n innerResult = getMethod(iterator, 'return');\n if (!innerResult) {\n if (kind === 'throw') throw value;\n return value;\n }\n innerResult = call(innerResult, iterator);\n } catch (error) {\n innerError = true;\n innerResult = error;\n }\n if (kind === 'throw') throw value;\n if (innerError) throw innerResult;\n anObject(innerResult);\n return value;\n};\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar TypeError = global.TypeError;\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator, 'normal', condition);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (!iterFn) throw TypeError(tryToString(iterable) + ' is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n }\n iterator = getIterator(iterable, iterFn);\n }\n\n next = iterator.next;\n while (!(step = call(next, iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind-context');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar fails = require('../internals/fails');\nvar html = require('../internals/html');\nvar arraySlice = require('../internals/array-slice');\nvar createElement = require('../internals/document-create-element');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar Dispatch = global.Dispatch;\nvar Function = global.Function;\nvar MessageChannel = global.MessageChannel;\nvar String = global.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar location, defer, channel, port;\n\ntry {\n // Deno throws a ReferenceError on `location` access without `--location` flag\n location = global.location;\n} catch (error) { /* empty */ }\n\nvar run = function (id) {\n if (hasOwn(queue, id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar listener = function (event) {\n run(event.data);\n};\n\nvar post = function (id) {\n // old engines have not location.origin\n global.postMessage(String(id), location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(fn) {\n var args = arraySlice(arguments, 1);\n queue[++counter] = function () {\n apply(isCallable(fn) ? fn : Function(fn), undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = bind(port.postMessage, port);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n isCallable(global.postMessage) &&\n !global.importScripts &&\n location && location.protocol !== 'file:' &&\n !fails(post)\n ) {\n defer = post;\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n","var global = require('../internals/global');\nvar isConstructor = require('../internals/is-constructor');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n if (isConstructor(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a constructor');\n};\n","var anObject = require('../internals/an-object');\nvar aConstructor = require('../internals/a-constructor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aConstructor(S);\n};\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar macrotask = require('../internals/task').set;\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_IOS_PEBBLE = require('../internals/engine-is-ios-pebble');\nvar IS_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n flush = function () {\n var parent, fn;\n if (IS_NODE && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (error) {\n if (head) notify();\n else last = undefined;\n throw error;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n toggle = true;\n node = document.createTextNode('');\n new MutationObserver(flush).observe(node, { characterData: true });\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n // workaround of WebKit ~ iOS Safari 10.1 bug\n promise.constructor = Promise;\n then = bind(promise.then, promise);\n notify = function () {\n then(flush);\n };\n // Node.js without promises\n } else if (IS_NODE) {\n notify = function () {\n process.nextTick(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n // strange IE + webpack dev server bug - use .bind(global)\n macrotask = bind(macrotask, global);\n notify = function () {\n macrotask(flush);\n };\n }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n};\n","var userAgent = require('../internals/engine-user-agent');\nvar global = require('../internals/global');\n\nmodule.exports = /ipad|iphone|ipod/i.test(userAgent) && global.Pebble !== undefined;\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n","'use strict';\nvar aCallable = require('../internals/a-callable');\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aCallable(resolve);\n this.reject = aCallable(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n var console = global.console;\n if (console && console.error) {\n arguments.length == 1 ? console.error(a) : console.error(a, b);\n }\n};\n","var Queue = function () {\n this.head = null;\n this.tail = null;\n};\n\nQueue.prototype = {\n add: function (item) {\n var entry = { item: item, next: null };\n if (this.head) this.tail.next = entry;\n else this.head = entry;\n this.tail = entry;\n },\n get: function () {\n var entry = this.head;\n if (entry) {\n this.head = entry.next;\n if (this.tail === entry) this.tail = null;\n return entry.item;\n }\n }\n};\n\nmodule.exports = Queue;\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar call = require('../internals/function-call');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar aCallable = require('../internals/a-callable');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar inspectSource = require('../internals/inspect-source');\nvar iterate = require('../internals/iterate');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar promiseResolve = require('../internals/promise-resolve');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar Queue = require('../internals/queue');\nvar InternalStateModule = require('../internals/internal-state');\nvar isForced = require('../internals/is-forced');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_BROWSER = require('../internals/engine-is-browser');\nvar IS_NODE = require('../internals/engine-is-node');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\n\nvar getInternalState = InternalStateModule.getterFor(PROMISE);\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar NativePromisePrototype = NativePromise && NativePromise.prototype;\nvar PromiseConstructor = NativePromise;\nvar PromisePrototype = NativePromisePrototype;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\n\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar NATIVE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent);\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar SUBCLASSING = false;\n\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor);\n var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor);\n // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // We can't detect it synchronously, so just check versions\n if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;\n // We need Promise#finally in the pure version for preventing prototype pollution\n if (IS_PURE && !PromisePrototype['finally']) return true;\n // We can't use @@species feature detection in V8 since it causes\n // deoptimization and performance degradation\n // https://github.com/zloirock/core-js/issues/679\n if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false;\n // Detect correctness of subclassing with @@species support\n var promise = new PromiseConstructor(function (resolve) { resolve(1); });\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;\n if (!SUBCLASSING) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT;\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && isCallable(then = it.then) ? then : false;\n};\n\nvar callReaction = function (reaction, state) {\n var value = state.value;\n var ok = state.state == FULFILLED;\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n state.rejection = HANDLED;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // can throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n call(then, result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (error) {\n if (domain && !exited) domain.exit();\n reject(error);\n }\n};\n\nvar notify = function (state, isReject) {\n if (state.notified) return;\n state.notified = true;\n microtask(function () {\n var reactions = state.reactions;\n var reaction;\n while (reaction = reactions.get()) {\n callReaction(reaction, state);\n }\n state.notified = false;\n if (isReject && !state.rejection) onUnhandled(state);\n });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n event = document.createEvent('Event');\n event.promise = promise;\n event.reason = reason;\n event.initEvent(name, false, true);\n global.dispatchEvent(event);\n } else event = { promise: promise, reason: reason };\n if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n var value = state.value;\n var IS_UNHANDLED = isUnhandled(state);\n var result;\n if (IS_UNHANDLED) {\n result = perform(function () {\n if (IS_NODE) {\n process.emit('unhandledRejection', value, promise);\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n if (result.error) throw result.value;\n }\n });\n};\n\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n if (IS_NODE) {\n process.emit('rejectionHandled', promise);\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\n\nvar bind = function (fn, state, unwrap) {\n return function (value) {\n fn(state, value, unwrap);\n };\n};\n\nvar internalReject = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n try {\n if (state.facade === value) throw TypeError(\"Promise can't be resolved itself\");\n var then = isThenable(value);\n if (then) {\n microtask(function () {\n var wrapper = { done: false };\n try {\n call(then, value,\n bind(internalResolve, wrapper, state),\n bind(internalReject, wrapper, state)\n );\n } catch (error) {\n internalReject(wrapper, error, state);\n }\n });\n } else {\n state.value = value;\n state.state = FULFILLED;\n notify(state, false);\n }\n } catch (error) {\n internalReject({ done: false }, error, state);\n }\n};\n\n// constructor polyfill\nif (FORCED) {\n // 25.4.3.1 Promise(executor)\n PromiseConstructor = function Promise(executor) {\n anInstance(this, PromisePrototype);\n aCallable(executor);\n call(Internal, this);\n var state = getInternalState(this);\n try {\n executor(bind(internalResolve, state), bind(internalReject, state));\n } catch (error) {\n internalReject(state, error);\n }\n };\n PromisePrototype = PromiseConstructor.prototype;\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n Internal = function Promise(executor) {\n setInternalState(this, {\n type: PROMISE,\n done: false,\n notified: false,\n parent: false,\n reactions: new Queue(),\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n Internal.prototype = redefineAll(PromisePrototype, {\n // `Promise.prototype.then` method\n // https://tc39.es/ecma262/#sec-promise.prototype.then\n // eslint-disable-next-line unicorn/no-thenable -- safe\n then: function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n state.parent = true;\n reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;\n reaction.fail = isCallable(onRejected) && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n if (state.state == PENDING) state.reactions.add(reaction);\n else microtask(function () {\n callReaction(reaction, state);\n });\n return reaction.promise;\n },\n // `Promise.prototype.catch` method\n // https://tc39.es/ecma262/#sec-promise.prototype.catch\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n var state = getInternalState(promise);\n this.promise = promise;\n this.resolve = bind(internalResolve, state);\n this.reject = bind(internalReject, state);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === PromiseConstructor || C === PromiseWrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n\n if (!IS_PURE && isCallable(NativePromise) && NativePromisePrototype !== Object.prototype) {\n nativeThen = NativePromisePrototype.then;\n\n if (!SUBCLASSING) {\n // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs\n redefine(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n call(nativeThen, that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n\n // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`\n redefine(NativePromisePrototype, 'catch', PromisePrototype['catch'], { unsafe: true });\n }\n\n // make `.constructor === Promise` work for native promise-based APIs\n try {\n delete NativePromisePrototype.constructor;\n } catch (error) { /* empty */ }\n\n // make `instanceof Promise` work for native promise-based APIs\n if (setPrototypeOf) {\n setPrototypeOf(NativePromisePrototype, PromisePrototype);\n }\n }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n // `Promise.reject` method\n // https://tc39.es/ecma262/#sec-promise.reject\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n call(capability.reject, undefined, r);\n return capability.promise;\n }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n // `Promise.resolve` method\n // https://tc39.es/ecma262/#sec-promise.resolve\n resolve: function resolve(x) {\n return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n // `Promise.all` method\n // https://tc39.es/ecma262/#sec-promise.all\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call($promiseResolve, C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n },\n // `Promise.race` method\n // https://tc39.es/ecma262/#sec-promise.race\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n iterate(iterable, function (promise) {\n call($promiseResolve, C, promise).then(capability.resolve, reject);\n });\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","module.exports = typeof window == 'object';\n","module.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n","// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`\nvar documentCreateElement = require('../internals/document-create-element');\n\nvar classList = documentCreateElement('span').classList;\nvar DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;\n\nmodule.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype;\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar handlePrototype = function (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n if (DOMIterables[COLLECTION_NAME]) {\n handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype);\n }\n}\n\nhandlePrototype(DOMTokenListPrototype);\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","var anObject = require('../internals/an-object');\nvar iteratorClose = require('../internals/iterator-close');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n};\n","'use strict';\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar isConstructor = require('../internals/is-constructor');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar Array = global.Array;\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var IS_CONSTRUCTOR = isConstructor(this);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined);\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod && !(this == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = getIterator(O, iteratorMethod);\n next = iterator.next;\n result = IS_CONSTRUCTOR ? new this() : [];\n for (;!(step = call(next, iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = lengthOfArrayLike(O);\n result = IS_CONSTRUCTOR ? new this(length) : Array(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n","var $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n // eslint-disable-next-line es/no-array-from -- required for testing\n Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.es/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n from: from\n});\n","var global = require('../internals/global');\nvar classof = require('../internals/classof');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n redefine(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","var global = require('../internals/global');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar Object = global.Object;\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof Object ? ObjectPrototype : null;\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n redefine(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: toString(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = replace(string, ltrim, '');\n if (TYPE & 2) string = replace(string, rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","var PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar regexpFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar shared = require('../internals/shared');\nvar create = require('../internals/object-create');\nvar getInternalState = require('../internals/internal-state').get;\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\nvar nativeExec = RegExp.prototype.exec;\nvar patchedExec = nativeExec;\nvar charAt = uncurryThis(''.charAt);\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n call(nativeExec, re1, 'a');\n call(nativeExec, re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\n\nif (PATCH) {\n patchedExec = function exec(string) {\n var re = this;\n var state = getInternalState(re);\n var str = toString(string);\n var raw = state.raw;\n var result, reCopy, lastIndex, match, i, object, group;\n\n if (raw) {\n raw.lastIndex = re.lastIndex;\n result = call(patchedExec, raw, str);\n re.lastIndex = raw.lastIndex;\n return result;\n }\n\n var groups = state.groups;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = call(regexpFlags, re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = replace(flags, 'y', '');\n if (indexOf(flags, 'g') === -1) {\n flags += 'g';\n }\n\n strCopy = stringSlice(str, re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = call(nativeExec, sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = stringSlice(match.input, charsAdded);\n match[0] = stringSlice(match[0], charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n call(nativeReplace, match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n if (match && groups) {\n match.groups = object = create(null);\n for (i = 0; i < groups.length; i++) {\n group = groups[i];\n object[group[0]] = match[group[1]];\n }\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nvar UNSUPPORTED_Y = fails(function () {\n var re = $RegExp('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') != null;\n});\n\n// UC Browser bug\n// https://github.com/zloirock/core-js/issues/1008\nvar MISSED_STICKY = UNSUPPORTED_Y || fails(function () {\n return !$RegExp('a', 'y').sticky;\n});\n\nvar BROKEN_CARET = UNSUPPORTED_Y || fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = $RegExp('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') != null;\n});\n\nmodule.exports = {\n BROKEN_CARET: BROKEN_CARET,\n MISSED_STICKY: MISSED_STICKY,\n UNSUPPORTED_Y: UNSUPPORTED_Y\n};\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('.', 's');\n return !(re.dotAll && re.exec('\\n') && re.flags === 's');\n});\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('(?<a>b)', 'g');\n return re.exec('b').groups.a !== 'b' ||\n 'b'.replace(re, '$<a>c') !== 'bc';\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n","var global = require('../internals/global');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\n\nvar Array = global.Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = Array(max(fin - k, 0));\n for (var n = 0; k < fin; k++, n++) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n};\n","/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice-simple');\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return arraySlice(windowNames);\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && classof(it) == 'Window'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var path = require('../internals/path');\nvar hasOwn = require('../internals/has-own-property');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar isArray = require('../internals/is-array');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isSymbol = require('../internals/is-symbol');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar $toString = require('../internals/to-string');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar arraySlice = require('../internals/array-slice');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\n\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];\nvar TypeError = global.TypeError;\nvar QObject = global.QObject;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar push = uncurryThis([].push);\n\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\n\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPropertyKey(P);\n anObject(Attributes);\n if (hasOwn(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPropertyKey(V);\n var enumerable = call(nativePropertyIsEnumerable, this, P);\n if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]\n ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPropertyKey(P);\n if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {\n push(result, AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (isPrototypeOf(SymbolPrototype, this)) throw TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);\n if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n SymbolPrototype = $Symbol[PROTOTYPE];\n\n redefine(SymbolPrototype, 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n redefine($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n definePropertiesModule.f = $defineProperties;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n nativeDefineProperty(SymbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n // `Symbol.for` method\n // https://tc39.es/ecma262/#sec-symbol.for\n 'for': function (key) {\n var string = $toString(key);\n if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = $Symbol(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n },\n // `Symbol.keyFor` method\n // https://tc39.es/ecma262/#sec-symbol.keyfor\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n },\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.es/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.es/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.es/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.es/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames,\n // `Object.getOwnPropertySymbols` method\n // https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return getOwnPropertySymbolsModule.f(toObject(it));\n }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.es/ecma262/#sec-json.stringify\nif ($stringify) {\n var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n var symbol = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) != '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) != '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) != '{}';\n });\n\n $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n stringify: function stringify(it, replacer, space) {\n var args = arraySlice(arguments);\n var $replacer = replacer;\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (isCallable($replacer)) value = call($replacer, this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return apply($stringify, null, args);\n }\n });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!SymbolPrototype[TO_PRIMITIVE]) {\n var valueOf = SymbolPrototype.valueOf;\n // eslint-disable-next-line no-unused-vars -- required for .length\n redefine(SymbolPrototype, TO_PRIMITIVE, function (hint) {\n // TODO: improve hint logic\n return call(valueOf, this);\n });\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","// `Symbol.prototype.description` getter\n// https://tc39.es/ecma262/#sec-symbol.prototype.description\n'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar toString = require('../internals/to-string');\nvar defineProperty = require('../internals/object-define-property').f;\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\n\nvar NativeSymbol = global.Symbol;\nvar SymbolPrototype = NativeSymbol && NativeSymbol.prototype;\n\nif (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in SymbolPrototype) ||\n // Safari 12 bug\n NativeSymbol().description !== undefined\n)) {\n var EmptyStringDescriptionStore = {};\n // wrap Symbol constructor for correct work with undefined description\n var SymbolWrapper = function Symbol() {\n var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString(arguments[0]);\n var result = isPrototypeOf(SymbolPrototype, this)\n ? new NativeSymbol(description)\n // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n : description === undefined ? NativeSymbol() : NativeSymbol(description);\n if (description === '') EmptyStringDescriptionStore[result] = true;\n return result;\n };\n\n copyConstructorProperties(SymbolWrapper, NativeSymbol);\n SymbolWrapper.prototype = SymbolPrototype;\n SymbolPrototype.constructor = SymbolWrapper;\n\n var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)';\n var symbolToString = uncurryThis(SymbolPrototype.toString);\n var symbolValueOf = uncurryThis(SymbolPrototype.valueOf);\n var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n var replace = uncurryThis(''.replace);\n var stringSlice = uncurryThis(''.slice);\n\n defineProperty(SymbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n var symbol = symbolValueOf(this);\n var string = symbolToString(symbol);\n if (hasOwn(EmptyStringDescriptionStore, symbol)) return '';\n var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, '$1');\n return desc === '' ? undefined : desc;\n }\n });\n\n $({ global: true, forced: true }, {\n Symbol: SymbolWrapper\n });\n}\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar redefine = require('../internals/redefine');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (KEY, exec, FORCED, SHAM) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () { execCalled = true; return null; };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n FORCED\n ) {\n var uncurriedNativeRegExpMethod = uncurryThis(/./[SYMBOL]);\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n var uncurriedNativeMethod = uncurryThis(nativeMethod);\n var $exec = regexp.exec;\n if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: uncurriedNativeRegExpMethod(regexp, str, arg2) };\n }\n return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) };\n }\n return { done: false };\n });\n\n redefine(String.prototype, KEY, methods[0]);\n redefine(RegExpPrototype, SYMBOL, methods[1]);\n }\n\n if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar regexpExec = require('../internals/regexp-exec');\n\nvar TypeError = global.TypeError;\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (isCallable(exec)) {\n var result = call(exec, R, S);\n if (result !== null) anObject(result);\n return result;\n }\n if (classof(R) === 'RegExp') return call(regexpExec, R, S);\n throw TypeError('RegExp#exec called on incompatible receiver');\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar getMethod = require('../internals/get-method');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : getMethod(regexp, MATCH);\n return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toObject = require('../internals/to-object');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar TypeError = global.TypeError;\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart);\n }\n if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n }\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n O.length = len - actualDeleteCount + insertCount;\n return A;\n }\n});\n","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar isRegExp = require('../internals/is-regexp');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar arraySlice = require('../internals/array-slice-simple');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar fails = require('../internals/fails');\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar MAX_UINT32 = 0xFFFFFFFF;\nvar min = Math.min;\nvar $push = [].push;\nvar exec = uncurryThis(/./.exec);\nvar push = uncurryThis($push);\nvar stringSlice = uncurryThis(''.slice);\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = toString(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return call(nativeSplit, string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = call(regexpExec, separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n push(output, stringSlice(string, lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) apply($push, output, arraySlice(match, 1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !exec(separatorCopy, '')) push(output, '');\n } else push(output, stringSlice(string, lastLastIndex));\n return output.length > lim ? arraySlice(output, 0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.es/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = separator == undefined ? undefined : getMethod(separator, SPLIT);\n return splitter\n ? call(splitter, separator, O, limit)\n : call(internalSplit, toString(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (string, limit) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);\n\n if (res.done) return res.value;\n\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (UNSUPPORTED_Y ? 'g' : 'y');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\n var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n push(A, stringSlice(S, p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n push(A, z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n push(A, stringSlice(S, p));\n return A;\n }\n ];\n}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\n","var isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n isCallable(NewTarget = dummy.constructor) &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\n// `thisNumberValue` abstract operation\n// https://tc39.es/ecma262/#sec-thisnumbervalue\nmodule.exports = uncurryThis(1.0.valueOf);\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar hasOwn = require('../internals/has-own-property');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isSymbol = require('../internals/is-symbol');\nvar toPrimitive = require('../internals/to-primitive');\nvar fails = require('../internals/fails');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar thisNumberValue = require('../internals/this-number-value');\nvar trim = require('../internals/string-trim').trim;\n\nvar NUMBER = 'Number';\nvar NativeNumber = global[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\nvar TypeError = global.TypeError;\nvar arraySlice = uncurryThis(''.slice);\nvar charCodeAt = uncurryThis(''.charCodeAt);\n\n// `ToNumeric` abstract operation\n// https://tc39.es/ecma262/#sec-tonumeric\nvar toNumeric = function (value) {\n var primValue = toPrimitive(value, 'number');\n return typeof primValue == 'bigint' ? primValue : toNumber(primValue);\n};\n\n// `ToNumber` abstract operation\n// https://tc39.es/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, 'number');\n var first, third, radix, maxCode, digits, length, index, code;\n if (isSymbol(it)) throw TypeError('Cannot convert a Symbol value to a number');\n if (typeof it == 'string' && it.length > 2) {\n it = trim(it);\n first = charCodeAt(it, 0);\n if (first === 43 || first === 45) {\n third = charCodeAt(it, 2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (charCodeAt(it, 1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n default: return +it;\n }\n digits = arraySlice(it, 2);\n length = digits.length;\n for (index = 0; index < length; index++) {\n code = charCodeAt(digits, index);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\n// `Number` constructor\n// https://tc39.es/ecma262/#sec-number-constructor\nif (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n var NumberWrapper = function Number(value) {\n var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value));\n var dummy = this;\n // check on 1..constructor(foo) case\n return isPrototypeOf(NumberPrototype, dummy) && fails(function () { thisNumberValue(dummy); })\n ? inheritIfRequired(Object(n), dummy, NumberWrapper) : n;\n };\n for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES2015 (in case, if modules with ES2015 Number statics required before):\n 'EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,' +\n // ESNext\n 'fromString,range'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (hasOwn(NativeNumber, key = keys[j]) && !hasOwn(NumberWrapper, key)) {\n defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));\n }\n }\n NumberWrapper.prototype = NumberPrototype;\n NumberPrototype.constructor = NumberWrapper;\n redefine(global, NUMBER, NumberWrapper);\n}\n","var DESCRIPTORS = require('../internals/descriptors');\nvar FUNCTION_NAME_EXISTS = require('../internals/function-name').EXISTS;\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar FunctionPrototype = Function.prototype;\nvar functionToString = uncurryThis(FunctionPrototype.toString);\nvar nameRE = /function\\b(?:\\s|\\/\\*[\\S\\s]*?\\*\\/|\\/\\/[^\\n\\r]*[\\n\\r]+)*([^\\s(/]*)/;\nvar regExpExec = uncurryThis(nameRE.exec);\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.es/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !FUNCTION_NAME_EXISTS) {\n defineProperty(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return regExpExec(nameRE, functionToString(this))[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar un$Join = uncurryThis([].join);\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.es/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n join: function join(separator) {\n return un$Join(toIndexedObject(this), separator === undefined ? ',' : separator);\n }\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return replace(replacement, symbols, function (match, ch) {\n var capture;\n switch (charAt(ch, 0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return stringSlice(str, 0, position);\n case \"'\": return stringSlice(str, tailPos);\n case '<':\n capture = namedCaptures[stringSlice(ch, 1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar fails = require('../internals/fails');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getMethod = require('../internals/get-method');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar max = Math.max;\nvar min = Math.min;\nvar concat = uncurryThis([].concat);\nvar push = uncurryThis([].push);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\n return ''.replace(re, '$<a>') !== '7';\n});\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.es/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = searchValue == undefined ? undefined : getMethod(searchValue, REPLACE);\n return replacer\n ? call(replacer, searchValue, O, replaceValue)\n : call(nativeReplace, toString(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n function (string, replaceValue) {\n var rx = anObject(this);\n var S = toString(string);\n\n if (\n typeof replaceValue == 'string' &&\n stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&\n stringIndexOf(replaceValue, '$<') === -1\n ) {\n var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\n if (res.done) return res.value;\n }\n\n var functionalReplace = isCallable(replaceValue);\n if (!functionalReplace) replaceValue = toString(replaceValue);\n\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n\n push(results, result);\n if (!global) break;\n\n var matchStr = toString(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = toString(result[0]);\n var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = concat([matched], captures, position, S);\n if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);\n var replacement = toString(apply(replaceValue, undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + stringSlice(S, nextSourcePosition);\n }\n ];\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\n","// `SameValue` abstract operation\n// https://tc39.es/ecma262/#sec-samevalue\n// eslint-disable-next-line es/no-object-is -- safe\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare -- NaN check\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar sameValue = require('../internals/same-value');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@search logic\nfixRegExpWellKnownSymbolLogic('search', function (SEARCH, nativeSearch, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.es/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = requireObjectCoercible(this);\n var searcher = regexp == undefined ? undefined : getMethod(regexp, SEARCH);\n return searcher ? call(searcher, regexp, O) : new RegExp(regexp)[SEARCH](toString(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@search\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeSearch, rx, S);\n\n if (res.done) return res.value;\n\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","/**\n * Extend object a with the properties of object b.\n * If there's a conflict, object b takes precedence.\n *\n * @param {object} a\n * @param {object} b\n */\nexport const extend = ( a, b ) => {\n\n\tfor( let i in b ) {\n\t\ta[ i ] = b[ i ];\n\t}\n\n\treturn a;\n\n}\n\n/**\n * querySelectorAll but returns an Array.\n */\nexport const queryAll = ( el, selector ) => {\n\n\treturn Array.from( el.querySelectorAll( selector ) );\n\n}\n\n/**\n * classList.toggle() with cross browser support\n */\nexport const toggleClass = ( el, className, value ) => {\n\tif( value ) {\n\t\tel.classList.add( className );\n\t}\n\telse {\n\t\tel.classList.remove( className );\n\t}\n}\n\n/**\n * Utility for deserializing a value.\n *\n * @param {*} value\n * @return {*}\n */\nexport const deserialize = ( value ) => {\n\n\tif( typeof value === 'string' ) {\n\t\tif( value === 'null' ) return null;\n\t\telse if( value === 'true' ) return true;\n\t\telse if( value === 'false' ) return false;\n\t\telse if( value.match( /^-?[\\d\\.]+$/ ) ) return parseFloat( value );\n\t}\n\n\treturn value;\n\n}\n\n/**\n * Measures the distance in pixels between point a\n * and point b.\n *\n * @param {object} a point with x/y properties\n * @param {object} b point with x/y properties\n *\n * @return {number}\n */\nexport const distanceBetween = ( a, b ) => {\n\n\tlet dx = a.x - b.x,\n\t\tdy = a.y - b.y;\n\n\treturn Math.sqrt( dx*dx + dy*dy );\n\n}\n\n/**\n * Applies a CSS transform to the target element.\n *\n * @param {HTMLElement} element\n * @param {string} transform\n */\nexport const transformElement = ( element, transform ) => {\n\n\telement.style.transform = transform;\n\n}\n\n/**\n * Element.matches with IE support.\n *\n * @param {HTMLElement} target The element to match\n * @param {String} selector The CSS selector to match\n * the element against\n *\n * @return {Boolean}\n */\nexport const matches = ( target, selector ) => {\n\n\tlet matchesMethod = target.matches || target.matchesSelector || target.msMatchesSelector;\n\n\treturn !!( matchesMethod && matchesMethod.call( target, selector ) );\n\n}\n\n/**\n * Find the closest parent that matches the given\n * selector.\n *\n * @param {HTMLElement} target The child element\n * @param {String} selector The CSS selector to match\n * the parents against\n *\n * @return {HTMLElement} The matched parent or null\n * if no matching parent was found\n */\nexport const closest = ( target, selector ) => {\n\n\t// Native Element.closest\n\tif( typeof target.closest === 'function' ) {\n\t\treturn target.closest( selector );\n\t}\n\n\t// Polyfill\n\twhile( target ) {\n\t\tif( matches( target, selector ) ) {\n\t\t\treturn target;\n\t\t}\n\n\t\t// Keep searching\n\t\ttarget = target.parentNode;\n\t}\n\n\treturn null;\n\n}\n\n/**\n * Handling the fullscreen functionality via the fullscreen API\n *\n * @see http://fullscreen.spec.whatwg.org/\n * @see https://developer.mozilla.org/en-US/docs/DOM/Using_fullscreen_mode\n */\nexport const enterFullscreen = element => {\n\n\telement = element || document.documentElement;\n\n\t// Check which implementation is available\n\tlet requestMethod = element.requestFullscreen ||\n\t\t\t\t\t\telement.webkitRequestFullscreen ||\n\t\t\t\t\t\telement.webkitRequestFullScreen ||\n\t\t\t\t\t\telement.mozRequestFullScreen ||\n\t\t\t\t\t\telement.msRequestFullscreen;\n\n\tif( requestMethod ) {\n\t\trequestMethod.apply( element );\n\t}\n\n}\n\n/**\n * Creates an HTML element and returns a reference to it.\n * If the element already exists the existing instance will\n * be returned.\n *\n * @param {HTMLElement} container\n * @param {string} tagname\n * @param {string} classname\n * @param {string} innerHTML\n *\n * @return {HTMLElement}\n */\nexport const createSingletonNode = ( container, tagname, classname, innerHTML='' ) => {\n\n\t// Find all nodes matching the description\n\tlet nodes = container.querySelectorAll( '.' + classname );\n\n\t// Check all matches to find one which is a direct child of\n\t// the specified container\n\tfor( let i = 0; i < nodes.length; i++ ) {\n\t\tlet testNode = nodes[i];\n\t\tif( testNode.parentNode === container ) {\n\t\t\treturn testNode;\n\t\t}\n\t}\n\n\t// If no node was found, create it now\n\tlet node = document.createElement( tagname );\n\tnode.className = classname;\n\tnode.innerHTML = innerHTML;\n\tcontainer.appendChild( node );\n\n\treturn node;\n\n}\n\n/**\n * Injects the given CSS styles into the DOM.\n *\n * @param {string} value\n */\nexport const createStyleSheet = ( value ) => {\n\n\tlet tag = document.createElement( 'style' );\n\ttag.type = 'text/css';\n\n\tif( value && value.length > 0 ) {\n\t\tif( tag.styleSheet ) {\n\t\t\ttag.styleSheet.cssText = value;\n\t\t}\n\t\telse {\n\t\t\ttag.appendChild( document.createTextNode( value ) );\n\t\t}\n\t}\n\n\tdocument.head.appendChild( tag );\n\n\treturn tag;\n\n}\n\n/**\n * Returns a key:value hash of all query params.\n */\nexport const getQueryHash = () => {\n\n\tlet query = {};\n\n\tlocation.search.replace( /[A-Z0-9]+?=([\\w\\.%-]*)/gi, a => {\n\t\tquery[ a.split( '=' ).shift() ] = a.split( '=' ).pop();\n\t} );\n\n\t// Basic deserialization\n\tfor( let i in query ) {\n\t\tlet value = query[ i ];\n\n\t\tquery[ i ] = deserialize( unescape( value ) );\n\t}\n\n\t// Do not accept new dependencies via query config to avoid\n\t// the potential of malicious script injection\n\tif( typeof query['dependencies'] !== 'undefined' ) delete query['dependencies'];\n\n\treturn query;\n\n}\n\n/**\n * Returns the remaining height within the parent of the\n * target element.\n *\n * remaining height = [ configured parent height ] - [ current parent height ]\n *\n * @param {HTMLElement} element\n * @param {number} [height]\n */\nexport const getRemainingHeight = ( element, height = 0 ) => {\n\n\tif( element ) {\n\t\tlet newHeight, oldHeight = element.style.height;\n\n\t\t// Change the .stretch element height to 0 in order find the height of all\n\t\t// the other elements\n\t\telement.style.height = '0px';\n\n\t\t// In Overview mode, the parent (.slide) height is set of 700px.\n\t\t// Restore it temporarily to its natural height.\n\t\telement.parentNode.style.height = 'auto';\n\n\t\tnewHeight = height - element.parentNode.offsetHeight;\n\n\t\t// Restore the old height, just in case\n\t\telement.style.height = oldHeight + 'px';\n\n\t\t// Clear the parent (.slide) height. .removeProperty works in IE9+\n\t\telement.parentNode.style.removeProperty('height');\n\n\t\treturn newHeight;\n\t}\n\n\treturn height;\n\n}\n\nconst fileExtensionToMimeMap = {\n\t'mp4': 'video/mp4',\n\t'm4a': 'video/mp4',\n\t'ogv': 'video/ogg',\n\t'mpeg': 'video/mpeg',\n\t'webm': 'video/webm'\n}\n\n/**\n * Guess the MIME type for common file formats.\n */\nexport const getMimeTypeFromFile = ( filename='' ) => {\n\treturn fileExtensionToMimeMap[filename.split('.').pop()]\n}","const UA = navigator.userAgent;\nconst testElement = document.createElement( 'div' );\n\nexport const isMobile = /(iphone|ipod|ipad|android)/gi.test( UA ) ||\n\t\t\t\t\t\t( navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1 ); // iPadOS\n\nexport const isChrome = /chrome/i.test( UA ) && !/edge/i.test( UA );\n\nexport const isAndroid = /android/gi.test( UA );\n\n// Flags if we should use zoom instead of transform to scale\n// up slides. Zoom produces crisper results but has a lot of\n// xbrowser quirks so we only use it in whitelisted browsers.\nexport const supportsZoom = 'zoom' in testElement.style && !isMobile &&\n\t\t\t\t( isChrome || /Version\\/[\\d\\.]+.*Safari/.test( UA ) );","/**\n * fitty v2.3.6 - Snugly resizes text to fit its parent container\n * Copyright (c) 2022 Rik Schennink <rik@pqina.nl> (https://pqina.nl/)\n */\n\nvar e=function(e){if(e){var t=function(e){return[].slice.call(e)},n=0,i=1,r=2,o=3,a=[],l=null,u=\"requestAnimationFrame\"in e?function(){e.cancelAnimationFrame(l),l=e.requestAnimationFrame((function(){return s(a.filter((function(e){return e.dirty&&e.active})))}))}:function(){},c=function(e){return function(){a.forEach((function(t){return t.dirty=e})),u()}},s=function(e){e.filter((function(e){return!e.styleComputed})).forEach((function(e){e.styleComputed=m(e)})),e.filter(y).forEach(v);var t=e.filter(p);t.forEach(d),t.forEach((function(e){v(e),f(e)})),t.forEach(S)},f=function(e){return e.dirty=n},d=function(e){e.availableWidth=e.element.parentNode.clientWidth,e.currentWidth=e.element.scrollWidth,e.previousFontSize=e.currentFontSize,e.currentFontSize=Math.min(Math.max(e.minSize,e.availableWidth/e.currentWidth*e.previousFontSize),e.maxSize),e.whiteSpace=e.multiLine&&e.currentFontSize===e.minSize?\"normal\":\"nowrap\"},p=function(e){return e.dirty!==r||e.dirty===r&&e.element.parentNode.clientWidth!==e.availableWidth},m=function(t){var n=e.getComputedStyle(t.element,null);return t.currentFontSize=parseFloat(n.getPropertyValue(\"font-size\")),t.display=n.getPropertyValue(\"display\"),t.whiteSpace=n.getPropertyValue(\"white-space\"),!0},y=function(e){var t=!1;return!e.preStyleTestCompleted&&(/inline-/.test(e.display)||(t=!0,e.display=\"inline-block\"),\"nowrap\"!==e.whiteSpace&&(t=!0,e.whiteSpace=\"nowrap\"),e.preStyleTestCompleted=!0,t)},v=function(e){e.element.style.whiteSpace=e.whiteSpace,e.element.style.display=e.display,e.element.style.fontSize=e.currentFontSize+\"px\"},S=function(e){e.element.dispatchEvent(new CustomEvent(\"fit\",{detail:{oldValue:e.previousFontSize,newValue:e.currentFontSize,scaleFactor:e.currentFontSize/e.previousFontSize}}))},h=function(e,t){return function(){e.dirty=t,e.active&&u()}},w=function(e){return function(){a=a.filter((function(t){return t.element!==e.element})),e.observeMutations&&e.observer.disconnect(),e.element.style.whiteSpace=e.originalStyle.whiteSpace,e.element.style.display=e.originalStyle.display,e.element.style.fontSize=e.originalStyle.fontSize}},b=function(e){return function(){e.active||(e.active=!0,u())}},z=function(e){return function(){return e.active=!1}},F=function(e){e.observeMutations&&(e.observer=new MutationObserver(h(e,i)),e.observer.observe(e.element,e.observeMutations))},g={minSize:16,maxSize:512,multiLine:!0,observeMutations:\"MutationObserver\"in e&&{subtree:!0,childList:!0,characterData:!0}},W=null,E=function(){e.clearTimeout(W),W=e.setTimeout(c(r),x.observeWindowDelay)},M=[\"resize\",\"orientationchange\"];return Object.defineProperty(x,\"observeWindow\",{set:function(t){var n=\"\".concat(t?\"add\":\"remove\",\"EventListener\");M.forEach((function(t){e[n](t,E)}))}}),x.observeWindow=!0,x.observeWindowDelay=100,x.fitAll=c(o),x}function C(e,t){var n=Object.assign({},g,t),i=e.map((function(e){var t=Object.assign({},n,{element:e,active:!0});return function(e){e.originalStyle={whiteSpace:e.element.style.whiteSpace,display:e.element.style.display,fontSize:e.element.style.fontSize},F(e),e.newbie=!0,e.dirty=!0,a.push(e)}(t),{element:e,fit:h(t,o),unfreeze:b(t),freeze:z(t),unsubscribe:w(t)}}));return u(),i}function x(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return\"string\"==typeof e?C(t(document.querySelectorAll(e)),n):C([e],n)[0]}}(\"undefined\"==typeof window?null:window);export default e;\n","import { extend, queryAll, closest, getMimeTypeFromFile } from '../utils/util.js'\nimport { isMobile } from '../utils/device.js'\n\nimport fitty from 'fitty';\n\n/**\n * Handles loading, unloading and playback of slide\n * content such as images, videos and iframes.\n */\nexport default class SlideContent {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.startEmbeddedIframe = this.startEmbeddedIframe.bind( this );\n\n\t}\n\n\t/**\n\t * Should the given element be preloaded?\n\t * Decides based on local element attributes and global config.\n\t *\n\t * @param {HTMLElement} element\n\t */\n\tshouldPreload( element ) {\n\n\t\t// Prefer an explicit global preload setting\n\t\tlet preload = this.Reveal.getConfig().preloadIframes;\n\n\t\t// If no global setting is available, fall back on the element's\n\t\t// own preload setting\n\t\tif( typeof preload !== 'boolean' ) {\n\t\t\tpreload = element.hasAttribute( 'data-preload' );\n\t\t}\n\n\t\treturn preload;\n\t}\n\n\t/**\n\t * Called when the given slide is within the configured view\n\t * distance. Shows the slide element and loads any content\n\t * that is set to load lazily (data-src).\n\t *\n\t * @param {HTMLElement} slide Slide to show\n\t */\n\tload( slide, options = {} ) {\n\n\t\t// Show the slide element\n\t\tslide.style.display = this.Reveal.getConfig().display;\n\n\t\t// Media elements with data-src attributes\n\t\tqueryAll( slide, 'img[data-src], video[data-src], audio[data-src], iframe[data-src]' ).forEach( element => {\n\t\t\tif( element.tagName !== 'IFRAME' || this.shouldPreload( element ) ) {\n\t\t\t\telement.setAttribute( 'src', element.getAttribute( 'data-src' ) );\n\t\t\t\telement.setAttribute( 'data-lazy-loaded', '' );\n\t\t\t\telement.removeAttribute( 'data-src' );\n\t\t\t}\n\t\t} );\n\n\t\t// Media elements with <source> children\n\t\tqueryAll( slide, 'video, audio' ).forEach( media => {\n\t\t\tlet sources = 0;\n\n\t\t\tqueryAll( media, 'source[data-src]' ).forEach( source => {\n\t\t\t\tsource.setAttribute( 'src', source.getAttribute( 'data-src' ) );\n\t\t\t\tsource.removeAttribute( 'data-src' );\n\t\t\t\tsource.setAttribute( 'data-lazy-loaded', '' );\n\t\t\t\tsources += 1;\n\t\t\t} );\n\n\t\t\t// Enable inline video playback in mobile Safari\n\t\t\tif( isMobile && media.tagName === 'VIDEO' ) {\n\t\t\t\tmedia.setAttribute( 'playsinline', '' );\n\t\t\t}\n\n\t\t\t// If we rewrote sources for this video/audio element, we need\n\t\t\t// to manually tell it to load from its new origin\n\t\t\tif( sources > 0 ) {\n\t\t\t\tmedia.load();\n\t\t\t}\n\t\t} );\n\n\n\t\t// Show the corresponding background element\n\t\tlet background = slide.slideBackgroundElement;\n\t\tif( background ) {\n\t\t\tbackground.style.display = 'block';\n\n\t\t\tlet backgroundContent = slide.slideBackgroundContentElement;\n\t\t\tlet backgroundIframe = slide.getAttribute( 'data-background-iframe' );\n\n\t\t\t// If the background contains media, load it\n\t\t\tif( background.hasAttribute( 'data-loaded' ) === false ) {\n\t\t\t\tbackground.setAttribute( 'data-loaded', 'true' );\n\n\t\t\t\tlet backgroundImage = slide.getAttribute( 'data-background-image' ),\n\t\t\t\t\tbackgroundVideo = slide.getAttribute( 'data-background-video' ),\n\t\t\t\t\tbackgroundVideoLoop = slide.hasAttribute( 'data-background-video-loop' ),\n\t\t\t\t\tbackgroundVideoMuted = slide.hasAttribute( 'data-background-video-muted' );\n\n\t\t\t\t// Images\n\t\t\t\tif( backgroundImage ) {\n\t\t\t\t\t// base64\n\t\t\t\t\tif( /^data:/.test( backgroundImage.trim() ) ) {\n\t\t\t\t\t\tbackgroundContent.style.backgroundImage = `url(${backgroundImage.trim()})`;\n\t\t\t\t\t}\n\t\t\t\t\t// URL(s)\n\t\t\t\t\telse {\n\t\t\t\t\t\tbackgroundContent.style.backgroundImage = backgroundImage.split( ',' ).map( background => {\n\t\t\t\t\t\t\treturn `url(${encodeURI(background.trim())})`;\n\t\t\t\t\t\t}).join( ',' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Videos\n\t\t\t\telse if ( backgroundVideo && !this.Reveal.isSpeakerNotes() ) {\n\t\t\t\t\tlet video = document.createElement( 'video' );\n\n\t\t\t\t\tif( backgroundVideoLoop ) {\n\t\t\t\t\t\tvideo.setAttribute( 'loop', '' );\n\t\t\t\t\t}\n\n\t\t\t\t\tif( backgroundVideoMuted ) {\n\t\t\t\t\t\tvideo.muted = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Enable inline playback in mobile Safari\n\t\t\t\t\t//\n\t\t\t\t\t// Mute is required for video to play when using\n\t\t\t\t\t// swipe gestures to navigate since they don't\n\t\t\t\t\t// count as direct user actions :'(\n\t\t\t\t\tif( isMobile ) {\n\t\t\t\t\t\tvideo.muted = true;\n\t\t\t\t\t\tvideo.setAttribute( 'playsinline', '' );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support comma separated lists of video sources\n\t\t\t\t\tbackgroundVideo.split( ',' ).forEach( source => {\n\t\t\t\t\t\tlet type = getMimeTypeFromFile( source );\n\t\t\t\t\t\tif( type ) {\n\t\t\t\t\t\t\tvideo.innerHTML += `<source src=\"${source}\" type=\"${type}\">`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvideo.innerHTML += `<source src=\"${source}\">`;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\tbackgroundContent.appendChild( video );\n\t\t\t\t}\n\t\t\t\t// Iframes\n\t\t\t\telse if( backgroundIframe && options.excludeIframes !== true ) {\n\t\t\t\t\tlet iframe = document.createElement( 'iframe' );\n\t\t\t\t\tiframe.setAttribute( 'allowfullscreen', '' );\n\t\t\t\t\tiframe.setAttribute( 'mozallowfullscreen', '' );\n\t\t\t\t\tiframe.setAttribute( 'webkitallowfullscreen', '' );\n\t\t\t\t\tiframe.setAttribute( 'allow', 'autoplay' );\n\n\t\t\t\t\tiframe.setAttribute( 'data-src', backgroundIframe );\n\n\t\t\t\t\tiframe.style.width = '100%';\n\t\t\t\t\tiframe.style.height = '100%';\n\t\t\t\t\tiframe.style.maxHeight = '100%';\n\t\t\t\t\tiframe.style.maxWidth = '100%';\n\n\t\t\t\t\tbackgroundContent.appendChild( iframe );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start loading preloadable iframes\n\t\t\tlet backgroundIframeElement = backgroundContent.querySelector( 'iframe[data-src]' );\n\t\t\tif( backgroundIframeElement ) {\n\n\t\t\t\t// Check if this iframe is eligible to be preloaded\n\t\t\t\tif( this.shouldPreload( background ) && !/autoplay=(1|true|yes)/gi.test( backgroundIframe ) ) {\n\t\t\t\t\tif( backgroundIframeElement.getAttribute( 'src' ) !== backgroundIframe ) {\n\t\t\t\t\t\tbackgroundIframeElement.setAttribute( 'src', backgroundIframe );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.layout( slide );\n\n\t}\n\n\t/**\n\t * Applies JS-dependent layout helpers for the given slide,\n\t * if there are any.\n\t */\n\tlayout( slide ) {\n\n\t\t// Autosize text with the r-fit-text class based on the\n\t\t// size of its container. This needs to happen after the\n\t\t// slide is visible in order to measure the text.\n\t\tArray.from( slide.querySelectorAll( '.r-fit-text' ) ).forEach( element => {\n\t\t\tfitty( element, {\n\t\t\t\tminSize: 24,\n\t\t\t\tmaxSize: this.Reveal.getConfig().height * 0.8,\n\t\t\t\tobserveMutations: false,\n\t\t\t\tobserveWindow: false\n\t\t\t} );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Unloads and hides the given slide. This is called when the\n\t * slide is moved outside of the configured view distance.\n\t *\n\t * @param {HTMLElement} slide\n\t */\n\tunload( slide ) {\n\n\t\t// Hide the slide element\n\t\tslide.style.display = 'none';\n\n\t\t// Hide the corresponding background element\n\t\tlet background = this.Reveal.getSlideBackground( slide );\n\t\tif( background ) {\n\t\t\tbackground.style.display = 'none';\n\n\t\t\t// Unload any background iframes\n\t\t\tqueryAll( background, 'iframe[src]' ).forEach( element => {\n\t\t\t\telement.removeAttribute( 'src' );\n\t\t\t} );\n\t\t}\n\n\t\t// Reset lazy-loaded media elements with src attributes\n\t\tqueryAll( slide, 'video[data-lazy-loaded][src], audio[data-lazy-loaded][src], iframe[data-lazy-loaded][src]' ).forEach( element => {\n\t\t\telement.setAttribute( 'data-src', element.getAttribute( 'src' ) );\n\t\t\telement.removeAttribute( 'src' );\n\t\t} );\n\n\t\t// Reset lazy-loaded media elements with <source> children\n\t\tqueryAll( slide, 'video[data-lazy-loaded] source[src], audio source[src]' ).forEach( source => {\n\t\t\tsource.setAttribute( 'data-src', source.getAttribute( 'src' ) );\n\t\t\tsource.removeAttribute( 'src' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Enforces origin-specific format rules for embedded media.\n\t */\n\tformatEmbeddedContent() {\n\n\t\tlet _appendParamToIframeSource = ( sourceAttribute, sourceURL, param ) => {\n\t\t\tqueryAll( this.Reveal.getSlidesElement(), 'iframe['+ sourceAttribute +'*=\"'+ sourceURL +'\"]' ).forEach( el => {\n\t\t\t\tlet src = el.getAttribute( sourceAttribute );\n\t\t\t\tif( src && src.indexOf( param ) === -1 ) {\n\t\t\t\t\tel.setAttribute( sourceAttribute, src + ( !/\\?/.test( src ) ? '?' : '&' ) + param );\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\t// YouTube frames must include \"?enablejsapi=1\"\n\t\t_appendParamToIframeSource( 'src', 'youtube.com/embed/', 'enablejsapi=1' );\n\t\t_appendParamToIframeSource( 'data-src', 'youtube.com/embed/', 'enablejsapi=1' );\n\n\t\t// Vimeo frames must include \"?api=1\"\n\t\t_appendParamToIframeSource( 'src', 'player.vimeo.com/', 'api=1' );\n\t\t_appendParamToIframeSource( 'data-src', 'player.vimeo.com/', 'api=1' );\n\n\t}\n\n\t/**\n\t * Start playback of any embedded content inside of\n\t * the given element.\n\t *\n\t * @param {HTMLElement} element\n\t */\n\tstartEmbeddedContent( element ) {\n\n\t\tif( element && !this.Reveal.isSpeakerNotes() ) {\n\n\t\t\t// Restart GIFs\n\t\t\tqueryAll( element, 'img[src$=\".gif\"]' ).forEach( el => {\n\t\t\t\t// Setting the same unchanged source like this was confirmed\n\t\t\t\t// to work in Chrome, FF & Safari\n\t\t\t\tel.setAttribute( 'src', el.getAttribute( 'src' ) );\n\t\t\t} );\n\n\t\t\t// HTML5 media elements\n\t\t\tqueryAll( element, 'video, audio' ).forEach( el => {\n\t\t\t\tif( closest( el, '.fragment' ) && !closest( el, '.fragment.visible' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Prefer an explicit global autoplay setting\n\t\t\t\tlet autoplay = this.Reveal.getConfig().autoPlayMedia;\n\n\t\t\t\t// If no global setting is available, fall back on the element's\n\t\t\t\t// own autoplay setting\n\t\t\t\tif( typeof autoplay !== 'boolean' ) {\n\t\t\t\t\tautoplay = el.hasAttribute( 'data-autoplay' ) || !!closest( el, '.slide-background' );\n\t\t\t\t}\n\n\t\t\t\tif( autoplay && typeof el.play === 'function' ) {\n\n\t\t\t\t\t// If the media is ready, start playback\n\t\t\t\t\tif( el.readyState > 1 ) {\n\t\t\t\t\t\tthis.startEmbeddedMedia( { target: el } );\n\t\t\t\t\t}\n\t\t\t\t\t// Mobile devices never fire a loaded event so instead\n\t\t\t\t\t// of waiting, we initiate playback\n\t\t\t\t\telse if( isMobile ) {\n\t\t\t\t\t\tlet promise = el.play();\n\n\t\t\t\t\t\t// If autoplay does not work, ensure that the controls are visible so\n\t\t\t\t\t\t// that the viewer can start the media on their own\n\t\t\t\t\t\tif( promise && typeof promise.catch === 'function' && el.controls === false ) {\n\t\t\t\t\t\t\tpromise.catch( () => {\n\t\t\t\t\t\t\t\tel.controls = true;\n\n\t\t\t\t\t\t\t\t// Once the video does start playing, hide the controls again\n\t\t\t\t\t\t\t\tel.addEventListener( 'play', () => {\n\t\t\t\t\t\t\t\t\tel.controls = false;\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// If the media isn't loaded, wait before playing\n\t\t\t\t\telse {\n\t\t\t\t\t\tel.removeEventListener( 'loadeddata', this.startEmbeddedMedia ); // remove first to avoid dupes\n\t\t\t\t\t\tel.addEventListener( 'loadeddata', this.startEmbeddedMedia );\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Normal iframes\n\t\t\tqueryAll( element, 'iframe[src]' ).forEach( el => {\n\t\t\t\tif( closest( el, '.fragment' ) && !closest( el, '.fragment.visible' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.startEmbeddedIframe( { target: el } );\n\t\t\t} );\n\n\t\t\t// Lazy loading iframes\n\t\t\tqueryAll( element, 'iframe[data-src]' ).forEach( el => {\n\t\t\t\tif( closest( el, '.fragment' ) && !closest( el, '.fragment.visible' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif( el.getAttribute( 'src' ) !== el.getAttribute( 'data-src' ) ) {\n\t\t\t\t\tel.removeEventListener( 'load', this.startEmbeddedIframe ); // remove first to avoid dupes\n\t\t\t\t\tel.addEventListener( 'load', this.startEmbeddedIframe );\n\t\t\t\t\tel.setAttribute( 'src', el.getAttribute( 'data-src' ) );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Starts playing an embedded video/audio element after\n\t * it has finished loading.\n\t *\n\t * @param {object} event\n\t */\n\tstartEmbeddedMedia( event ) {\n\n\t\tlet isAttachedToDOM = !!closest( event.target, 'html' ),\n\t\t\tisVisible \t\t= !!closest( event.target, '.present' );\n\n\t\tif( isAttachedToDOM && isVisible ) {\n\t\t\tevent.target.currentTime = 0;\n\t\t\tevent.target.play();\n\t\t}\n\n\t\tevent.target.removeEventListener( 'loadeddata', this.startEmbeddedMedia );\n\n\t}\n\n\t/**\n\t * \"Starts\" the content of an embedded iframe using the\n\t * postMessage API.\n\t *\n\t * @param {object} event\n\t */\n\tstartEmbeddedIframe( event ) {\n\n\t\tlet iframe = event.target;\n\n\t\tif( iframe && iframe.contentWindow ) {\n\n\t\t\tlet isAttachedToDOM = !!closest( event.target, 'html' ),\n\t\t\t\tisVisible \t\t= !!closest( event.target, '.present' );\n\n\t\t\tif( isAttachedToDOM && isVisible ) {\n\n\t\t\t\t// Prefer an explicit global autoplay setting\n\t\t\t\tlet autoplay = this.Reveal.getConfig().autoPlayMedia;\n\n\t\t\t\t// If no global setting is available, fall back on the element's\n\t\t\t\t// own autoplay setting\n\t\t\t\tif( typeof autoplay !== 'boolean' ) {\n\t\t\t\t\tautoplay = iframe.hasAttribute( 'data-autoplay' ) || !!closest( iframe, '.slide-background' );\n\t\t\t\t}\n\n\t\t\t\t// YouTube postMessage API\n\t\t\t\tif( /youtube\\.com\\/embed\\//.test( iframe.getAttribute( 'src' ) ) && autoplay ) {\n\t\t\t\t\tiframe.contentWindow.postMessage( '{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*' );\n\t\t\t\t}\n\t\t\t\t// Vimeo postMessage API\n\t\t\t\telse if( /player\\.vimeo\\.com\\//.test( iframe.getAttribute( 'src' ) ) && autoplay ) {\n\t\t\t\t\tiframe.contentWindow.postMessage( '{\"method\":\"play\"}', '*' );\n\t\t\t\t}\n\t\t\t\t// Generic postMessage API\n\t\t\t\telse {\n\t\t\t\t\tiframe.contentWindow.postMessage( 'slide:start', '*' );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Stop playback of any embedded content inside of\n\t * the targeted slide.\n\t *\n\t * @param {HTMLElement} element\n\t */\n\tstopEmbeddedContent( element, options = {} ) {\n\n\t\toptions = extend( {\n\t\t\t// Defaults\n\t\t\tunloadIframes: true\n\t\t}, options );\n\n\t\tif( element && element.parentNode ) {\n\t\t\t// HTML5 media elements\n\t\t\tqueryAll( element, 'video, audio' ).forEach( el => {\n\t\t\t\tif( !el.hasAttribute( 'data-ignore' ) && typeof el.pause === 'function' ) {\n\t\t\t\t\tel.setAttribute('data-paused-by-reveal', '');\n\t\t\t\t\tel.pause();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Generic postMessage API for non-lazy loaded iframes\n\t\t\tqueryAll( element, 'iframe' ).forEach( el => {\n\t\t\t\tif( el.contentWindow ) el.contentWindow.postMessage( 'slide:stop', '*' );\n\t\t\t\tel.removeEventListener( 'load', this.startEmbeddedIframe );\n\t\t\t});\n\n\t\t\t// YouTube postMessage API\n\t\t\tqueryAll( element, 'iframe[src*=\"youtube.com/embed/\"]' ).forEach( el => {\n\t\t\t\tif( !el.hasAttribute( 'data-ignore' ) && el.contentWindow && typeof el.contentWindow.postMessage === 'function' ) {\n\t\t\t\t\tel.contentWindow.postMessage( '{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*' );\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Vimeo postMessage API\n\t\t\tqueryAll( element, 'iframe[src*=\"player.vimeo.com/\"]' ).forEach( el => {\n\t\t\t\tif( !el.hasAttribute( 'data-ignore' ) && el.contentWindow && typeof el.contentWindow.postMessage === 'function' ) {\n\t\t\t\t\tel.contentWindow.postMessage( '{\"method\":\"pause\"}', '*' );\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif( options.unloadIframes === true ) {\n\t\t\t\t// Unload lazy-loaded iframes\n\t\t\t\tqueryAll( element, 'iframe[data-src]' ).forEach( el => {\n\t\t\t\t\t// Only removing the src doesn't actually unload the frame\n\t\t\t\t\t// in all browsers (Firefox) so we set it to blank first\n\t\t\t\t\tel.setAttribute( 'src', 'about:blank' );\n\t\t\t\t\tel.removeAttribute( 'src' );\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t}\n\n}\n","/**\n * Handles the display of reveal.js' optional slide number.\n */\nexport default class SlideNumber {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\trender() {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.className = 'slide-number';\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tlet slideNumberDisplay = 'none';\n\t\tif( config.slideNumber && !this.Reveal.isPrintingPDF() ) {\n\t\t\tif( config.showSlideNumber === 'all' ) {\n\t\t\t\tslideNumberDisplay = 'block';\n\t\t\t}\n\t\t\telse if( config.showSlideNumber === 'speaker' && this.Reveal.isSpeakerNotes() ) {\n\t\t\t\tslideNumberDisplay = 'block';\n\t\t\t}\n\t\t}\n\n\t\tthis.element.style.display = slideNumberDisplay;\n\n\t}\n\n\t/**\n\t * Updates the slide number to match the current slide.\n\t */\n\tupdate() {\n\n\t\t// Update slide number if enabled\n\t\tif( this.Reveal.getConfig().slideNumber && this.element ) {\n\t\t\tthis.element.innerHTML = this.getSlideNumber();\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the HTML string corresponding to the current slide\n\t * number, including formatting.\n\t */\n\tgetSlideNumber( slide = this.Reveal.getCurrentSlide() ) {\n\n\t\tlet config = this.Reveal.getConfig();\n\t\tlet value;\n\t\tlet format = 'h.v';\n\n\t\tif ( typeof config.slideNumber === 'function' ) {\n\t\t\tvalue = config.slideNumber( slide );\n\t\t} else {\n\t\t\t// Check if a custom number format is available\n\t\t\tif( typeof config.slideNumber === 'string' ) {\n\t\t\t\tformat = config.slideNumber;\n\t\t\t}\n\n\t\t\t// If there are ONLY vertical slides in this deck, always use\n\t\t\t// a flattened slide number\n\t\t\tif( !/c/.test( format ) && this.Reveal.getHorizontalSlides().length === 1 ) {\n\t\t\t\tformat = 'c';\n\t\t\t}\n\n\t\t\t// Offset the current slide number by 1 to make it 1-indexed\n\t\t\tlet horizontalOffset = slide && slide.dataset.visibility === 'uncounted' ? 0 : 1;\n\n\t\t\tvalue = [];\n\t\t\tswitch( format ) {\n\t\t\t\tcase 'c':\n\t\t\t\t\tvalue.push( this.Reveal.getSlidePastCount( slide ) + horizontalOffset );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'c/t':\n\t\t\t\t\tvalue.push( this.Reveal.getSlidePastCount( slide ) + horizontalOffset, '/', this.Reveal.getTotalSlides() );\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tlet indices = this.Reveal.getIndices( slide );\n\t\t\t\t\tvalue.push( indices.h + horizontalOffset );\n\t\t\t\t\tlet sep = format === 'h/v' ? '/' : '.';\n\t\t\t\t\tif( this.Reveal.isVerticalSlide( slide ) ) value.push( sep, indices.v + 1 );\n\t\t\t}\n\t\t}\n\n\t\tlet url = '#' + this.Reveal.location.getHash( slide );\n\t\treturn this.formatNumber( value[0], value[1], value[2], url );\n\n\t}\n\n\t/**\n\t * Applies HTML formatting to a slide number before it's\n\t * written to the DOM.\n\t *\n\t * @param {number} a Current slide\n\t * @param {string} delimiter Character to separate slide numbers\n\t * @param {(number|*)} b Total slides\n\t * @param {HTMLElement} [url='#'+locationHash()] The url to link to\n\t * @return {string} HTML string fragment\n\t */\n\tformatNumber( a, delimiter, b, url = '#' + this.Reveal.location.getHash() ) {\n\n\t\tif( typeof b === 'number' && !isNaN( b ) ) {\n\t\t\treturn `<a href=\"${url}\">\n\t\t\t\t\t<span class=\"slide-number-a\">${a}</span>\n\t\t\t\t\t<span class=\"slide-number-delimiter\">${delimiter}</span>\n\t\t\t\t\t<span class=\"slide-number-b\">${b}</span>\n\t\t\t\t\t</a>`;\n\t\t}\n\t\telse {\n\t\t\treturn `<a href=\"${url}\">\n\t\t\t\t\t<span class=\"slide-number-a\">${a}</span>\n\t\t\t\t\t</a>`;\n\t\t}\n\n\t}\n\n}","/**\n * Converts various color input formats to an {r:0,g:0,b:0} object.\n *\n * @param {string} color The string representation of a color\n * @example\n * colorToRgb('#000');\n * @example\n * colorToRgb('#000000');\n * @example\n * colorToRgb('rgb(0,0,0)');\n * @example\n * colorToRgb('rgba(0,0,0)');\n *\n * @return {{r: number, g: number, b: number, [a]: number}|null}\n */\nexport const colorToRgb = ( color ) => {\n\n\tlet hex3 = color.match( /^#([0-9a-f]{3})$/i );\n\tif( hex3 && hex3[1] ) {\n\t\thex3 = hex3[1];\n\t\treturn {\n\t\t\tr: parseInt( hex3.charAt( 0 ), 16 ) * 0x11,\n\t\t\tg: parseInt( hex3.charAt( 1 ), 16 ) * 0x11,\n\t\t\tb: parseInt( hex3.charAt( 2 ), 16 ) * 0x11\n\t\t};\n\t}\n\n\tlet hex6 = color.match( /^#([0-9a-f]{6})$/i );\n\tif( hex6 && hex6[1] ) {\n\t\thex6 = hex6[1];\n\t\treturn {\n\t\t\tr: parseInt( hex6.substr( 0, 2 ), 16 ),\n\t\t\tg: parseInt( hex6.substr( 2, 2 ), 16 ),\n\t\t\tb: parseInt( hex6.substr( 4, 2 ), 16 )\n\t\t};\n\t}\n\n\tlet rgb = color.match( /^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/i );\n\tif( rgb ) {\n\t\treturn {\n\t\t\tr: parseInt( rgb[1], 10 ),\n\t\t\tg: parseInt( rgb[2], 10 ),\n\t\t\tb: parseInt( rgb[3], 10 )\n\t\t};\n\t}\n\n\tlet rgba = color.match( /^rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\,\\s*([\\d]+|[\\d]*.[\\d]+)\\s*\\)$/i );\n\tif( rgba ) {\n\t\treturn {\n\t\t\tr: parseInt( rgba[1], 10 ),\n\t\t\tg: parseInt( rgba[2], 10 ),\n\t\t\tb: parseInt( rgba[3], 10 ),\n\t\t\ta: parseFloat( rgba[4] )\n\t\t};\n\t}\n\n\treturn null;\n\n}\n\n/**\n * Calculates brightness on a scale of 0-255.\n *\n * @param {string} color See colorToRgb for supported formats.\n * @see {@link colorToRgb}\n */\nexport const colorBrightness = ( color ) => {\n\n\tif( typeof color === 'string' ) color = colorToRgb( color );\n\n\tif( color ) {\n\t\treturn ( color.r * 299 + color.g * 587 + color.b * 114 ) / 1000;\n\t}\n\n\treturn null;\n\n}","import { queryAll } from '../utils/util.js'\nimport { colorToRgb, colorBrightness } from '../utils/color.js'\n\n/**\n * Creates and updates slide backgrounds.\n */\nexport default class Backgrounds {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\trender() {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.className = 'backgrounds';\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t}\n\n\t/**\n\t * Creates the slide background elements and appends them\n\t * to the background container. One element is created per\n\t * slide no matter if the given slide has visible background.\n\t */\n\tcreate() {\n\n\t\t// Clear prior backgrounds\n\t\tthis.element.innerHTML = '';\n\t\tthis.element.classList.add( 'no-transition' );\n\n\t\t// Iterate over all horizontal slides\n\t\tthis.Reveal.getHorizontalSlides().forEach( slideh => {\n\n\t\t\tlet backgroundStack = this.createBackground( slideh, this.element );\n\n\t\t\t// Iterate over all vertical slides\n\t\t\tqueryAll( slideh, 'section' ).forEach( slidev => {\n\n\t\t\t\tthis.createBackground( slidev, backgroundStack );\n\n\t\t\t\tbackgroundStack.classList.add( 'stack' );\n\n\t\t\t} );\n\n\t\t} );\n\n\t\t// Add parallax background if specified\n\t\tif( this.Reveal.getConfig().parallaxBackgroundImage ) {\n\n\t\t\tthis.element.style.backgroundImage = 'url(\"' + this.Reveal.getConfig().parallaxBackgroundImage + '\")';\n\t\t\tthis.element.style.backgroundSize = this.Reveal.getConfig().parallaxBackgroundSize;\n\t\t\tthis.element.style.backgroundRepeat = this.Reveal.getConfig().parallaxBackgroundRepeat;\n\t\t\tthis.element.style.backgroundPosition = this.Reveal.getConfig().parallaxBackgroundPosition;\n\n\t\t\t// Make sure the below properties are set on the element - these properties are\n\t\t\t// needed for proper transitions to be set on the element via CSS. To remove\n\t\t\t// annoying background slide-in effect when the presentation starts, apply\n\t\t\t// these properties after short time delay\n\t\t\tsetTimeout( () => {\n\t\t\t\tthis.Reveal.getRevealElement().classList.add( 'has-parallax-background' );\n\t\t\t}, 1 );\n\n\t\t}\n\t\telse {\n\n\t\t\tthis.element.style.backgroundImage = '';\n\t\t\tthis.Reveal.getRevealElement().classList.remove( 'has-parallax-background' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Creates a background for the given slide.\n\t *\n\t * @param {HTMLElement} slide\n\t * @param {HTMLElement} container The element that the background\n\t * should be appended to\n\t * @return {HTMLElement} New background div\n\t */\n\tcreateBackground( slide, container ) {\n\n\t\t// Main slide background element\n\t\tlet element = document.createElement( 'div' );\n\t\telement.className = 'slide-background ' + slide.className.replace( /present|past|future/, '' );\n\n\t\t// Inner background element that wraps images/videos/iframes\n\t\tlet contentElement = document.createElement( 'div' );\n\t\tcontentElement.className = 'slide-background-content';\n\n\t\telement.appendChild( contentElement );\n\t\tcontainer.appendChild( element );\n\n\t\tslide.slideBackgroundElement = element;\n\t\tslide.slideBackgroundContentElement = contentElement;\n\n\t\t// Syncs the background to reflect all current background settings\n\t\tthis.sync( slide );\n\n\t\treturn element;\n\n\t}\n\n\t/**\n\t * Renders all of the visual properties of a slide background\n\t * based on the various background attributes.\n\t *\n\t * @param {HTMLElement} slide\n\t */\n\tsync( slide ) {\n\n\t\tconst element = slide.slideBackgroundElement,\n\t\t\tcontentElement = slide.slideBackgroundContentElement;\n\n\t\tconst data = {\n\t\t\tbackground: slide.getAttribute( 'data-background' ),\n\t\t\tbackgroundSize: slide.getAttribute( 'data-background-size' ),\n\t\t\tbackgroundImage: slide.getAttribute( 'data-background-image' ),\n\t\t\tbackgroundVideo: slide.getAttribute( 'data-background-video' ),\n\t\t\tbackgroundIframe: slide.getAttribute( 'data-background-iframe' ),\n\t\t\tbackgroundColor: slide.getAttribute( 'data-background-color' ),\n\t\t\tbackgroundRepeat: slide.getAttribute( 'data-background-repeat' ),\n\t\t\tbackgroundPosition: slide.getAttribute( 'data-background-position' ),\n\t\t\tbackgroundTransition: slide.getAttribute( 'data-background-transition' ),\n\t\t\tbackgroundOpacity: slide.getAttribute( 'data-background-opacity' ),\n\t\t};\n\n\t\tconst dataPreload = slide.hasAttribute( 'data-preload' );\n\n\t\t// Reset the prior background state in case this is not the\n\t\t// initial sync\n\t\tslide.classList.remove( 'has-dark-background' );\n\t\tslide.classList.remove( 'has-light-background' );\n\n\t\telement.removeAttribute( 'data-loaded' );\n\t\telement.removeAttribute( 'data-background-hash' );\n\t\telement.removeAttribute( 'data-background-size' );\n\t\telement.removeAttribute( 'data-background-transition' );\n\t\telement.style.backgroundColor = '';\n\n\t\tcontentElement.style.backgroundSize = '';\n\t\tcontentElement.style.backgroundRepeat = '';\n\t\tcontentElement.style.backgroundPosition = '';\n\t\tcontentElement.style.backgroundImage = '';\n\t\tcontentElement.style.opacity = '';\n\t\tcontentElement.innerHTML = '';\n\n\t\tif( data.background ) {\n\t\t\t// Auto-wrap image urls in url(...)\n\t\t\tif( /^(http|file|\\/\\/)/gi.test( data.background ) || /\\.(svg|png|jpg|jpeg|gif|bmp)([?#\\s]|$)/gi.test( data.background ) ) {\n\t\t\t\tslide.setAttribute( 'data-background-image', data.background );\n\t\t\t}\n\t\t\telse {\n\t\t\t\telement.style.background = data.background;\n\t\t\t}\n\t\t}\n\n\t\t// Create a hash for this combination of background settings.\n\t\t// This is used to determine when two slide backgrounds are\n\t\t// the same.\n\t\tif( data.background || data.backgroundColor || data.backgroundImage || data.backgroundVideo || data.backgroundIframe ) {\n\t\t\telement.setAttribute( 'data-background-hash', data.background +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundSize +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundImage +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundVideo +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundIframe +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundColor +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundRepeat +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundPosition +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundTransition +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundOpacity );\n\t\t}\n\n\t\t// Additional and optional background properties\n\t\tif( data.backgroundSize ) element.setAttribute( 'data-background-size', data.backgroundSize );\n\t\tif( data.backgroundColor ) element.style.backgroundColor = data.backgroundColor;\n\t\tif( data.backgroundTransition ) element.setAttribute( 'data-background-transition', data.backgroundTransition );\n\n\t\tif( dataPreload ) element.setAttribute( 'data-preload', '' );\n\n\t\t// Background image options are set on the content wrapper\n\t\tif( data.backgroundSize ) contentElement.style.backgroundSize = data.backgroundSize;\n\t\tif( data.backgroundRepeat ) contentElement.style.backgroundRepeat = data.backgroundRepeat;\n\t\tif( data.backgroundPosition ) contentElement.style.backgroundPosition = data.backgroundPosition;\n\t\tif( data.backgroundOpacity ) contentElement.style.opacity = data.backgroundOpacity;\n\n\t\t// If this slide has a background color, we add a class that\n\t\t// signals if it is light or dark. If the slide has no background\n\t\t// color, no class will be added\n\t\tlet contrastColor = data.backgroundColor;\n\n\t\t// If no bg color was found, or it cannot be converted by colorToRgb, check the computed background\n\t\tif( !contrastColor || !colorToRgb( contrastColor ) ) {\n\t\t\tlet computedBackgroundStyle = window.getComputedStyle( element );\n\t\t\tif( computedBackgroundStyle && computedBackgroundStyle.backgroundColor ) {\n\t\t\t\tcontrastColor = computedBackgroundStyle.backgroundColor;\n\t\t\t}\n\t\t}\n\n\t\tif( contrastColor ) {\n\t\t\tconst rgb = colorToRgb( contrastColor );\n\n\t\t\t// Ignore fully transparent backgrounds. Some browsers return\n\t\t\t// rgba(0,0,0,0) when reading the computed background color of\n\t\t\t// an element with no background\n\t\t\tif( rgb && rgb.a !== 0 ) {\n\t\t\t\tif( colorBrightness( contrastColor ) < 128 ) {\n\t\t\t\t\tslide.classList.add( 'has-dark-background' );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tslide.classList.add( 'has-light-background' );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the background elements to reflect the current\n\t * slide.\n\t *\n\t * @param {boolean} includeAll If true, the backgrounds of\n\t * all vertical slides (not just the present) will be updated.\n\t */\n\tupdate( includeAll = false ) {\n\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tlet indices = this.Reveal.getIndices();\n\n\t\tlet currentBackground = null;\n\n\t\t// Reverse past/future classes when in RTL mode\n\t\tlet horizontalPast = this.Reveal.getConfig().rtl ? 'future' : 'past',\n\t\t\thorizontalFuture = this.Reveal.getConfig().rtl ? 'past' : 'future';\n\n\t\t// Update the classes of all backgrounds to match the\n\t\t// states of their slides (past/present/future)\n\t\tArray.from( this.element.childNodes ).forEach( ( backgroundh, h ) => {\n\n\t\t\tbackgroundh.classList.remove( 'past', 'present', 'future' );\n\n\t\t\tif( h < indices.h ) {\n\t\t\t\tbackgroundh.classList.add( horizontalPast );\n\t\t\t}\n\t\t\telse if ( h > indices.h ) {\n\t\t\t\tbackgroundh.classList.add( horizontalFuture );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbackgroundh.classList.add( 'present' );\n\n\t\t\t\t// Store a reference to the current background element\n\t\t\t\tcurrentBackground = backgroundh;\n\t\t\t}\n\n\t\t\tif( includeAll || h === indices.h ) {\n\t\t\t\tqueryAll( backgroundh, '.slide-background' ).forEach( ( backgroundv, v ) => {\n\n\t\t\t\t\tbackgroundv.classList.remove( 'past', 'present', 'future' );\n\n\t\t\t\t\tif( v < indices.v ) {\n\t\t\t\t\t\tbackgroundv.classList.add( 'past' );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( v > indices.v ) {\n\t\t\t\t\t\tbackgroundv.classList.add( 'future' );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tbackgroundv.classList.add( 'present' );\n\n\t\t\t\t\t\t// Only if this is the present horizontal and vertical slide\n\t\t\t\t\t\tif( h === indices.h ) currentBackground = backgroundv;\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\t\t\t}\n\n\t\t} );\n\n\t\t// Stop content inside of previous backgrounds\n\t\tif( this.previousBackground ) {\n\n\t\t\tthis.Reveal.slideContent.stopEmbeddedContent( this.previousBackground, { unloadIframes: !this.Reveal.slideContent.shouldPreload( this.previousBackground ) } );\n\n\t\t}\n\n\t\t// Start content in the current background\n\t\tif( currentBackground ) {\n\n\t\t\tthis.Reveal.slideContent.startEmbeddedContent( currentBackground );\n\n\t\t\tlet currentBackgroundContent = currentBackground.querySelector( '.slide-background-content' );\n\t\t\tif( currentBackgroundContent ) {\n\n\t\t\t\tlet backgroundImageURL = currentBackgroundContent.style.backgroundImage || '';\n\n\t\t\t\t// Restart GIFs (doesn't work in Firefox)\n\t\t\t\tif( /\\.gif/i.test( backgroundImageURL ) ) {\n\t\t\t\t\tcurrentBackgroundContent.style.backgroundImage = '';\n\t\t\t\t\twindow.getComputedStyle( currentBackgroundContent ).opacity;\n\t\t\t\t\tcurrentBackgroundContent.style.backgroundImage = backgroundImageURL;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Don't transition between identical backgrounds. This\n\t\t\t// prevents unwanted flicker.\n\t\t\tlet previousBackgroundHash = this.previousBackground ? this.previousBackground.getAttribute( 'data-background-hash' ) : null;\n\t\t\tlet currentBackgroundHash = currentBackground.getAttribute( 'data-background-hash' );\n\t\t\tif( currentBackgroundHash && currentBackgroundHash === previousBackgroundHash && currentBackground !== this.previousBackground ) {\n\t\t\t\tthis.element.classList.add( 'no-transition' );\n\t\t\t}\n\n\t\t\tthis.previousBackground = currentBackground;\n\n\t\t}\n\n\t\t// If there's a background brightness flag for this slide,\n\t\t// bubble it to the .reveal container\n\t\tif( currentSlide ) {\n\t\t\t[ 'has-light-background', 'has-dark-background' ].forEach( classToBubble => {\n\t\t\t\tif( currentSlide.classList.contains( classToBubble ) ) {\n\t\t\t\t\tthis.Reveal.getRevealElement().classList.add( classToBubble );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.getRevealElement().classList.remove( classToBubble );\n\t\t\t\t}\n\t\t\t}, this );\n\t\t}\n\n\t\t// Allow the first background to apply without transition\n\t\tsetTimeout( () => {\n\t\t\tthis.element.classList.remove( 'no-transition' );\n\t\t}, 1 );\n\n\t}\n\n\t/**\n\t * Updates the position of the parallax background based\n\t * on the current slide index.\n\t */\n\tupdateParallax() {\n\n\t\tlet indices = this.Reveal.getIndices();\n\n\t\tif( this.Reveal.getConfig().parallaxBackgroundImage ) {\n\n\t\t\tlet horizontalSlides = this.Reveal.getHorizontalSlides(),\n\t\t\t\tverticalSlides = this.Reveal.getVerticalSlides();\n\n\t\t\tlet backgroundSize = this.element.style.backgroundSize.split( ' ' ),\n\t\t\t\tbackgroundWidth, backgroundHeight;\n\n\t\t\tif( backgroundSize.length === 1 ) {\n\t\t\t\tbackgroundWidth = backgroundHeight = parseInt( backgroundSize[0], 10 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbackgroundWidth = parseInt( backgroundSize[0], 10 );\n\t\t\t\tbackgroundHeight = parseInt( backgroundSize[1], 10 );\n\t\t\t}\n\n\t\t\tlet slideWidth = this.element.offsetWidth,\n\t\t\t\thorizontalSlideCount = horizontalSlides.length,\n\t\t\t\thorizontalOffsetMultiplier,\n\t\t\t\thorizontalOffset;\n\n\t\t\tif( typeof this.Reveal.getConfig().parallaxBackgroundHorizontal === 'number' ) {\n\t\t\t\thorizontalOffsetMultiplier = this.Reveal.getConfig().parallaxBackgroundHorizontal;\n\t\t\t}\n\t\t\telse {\n\t\t\t\thorizontalOffsetMultiplier = horizontalSlideCount > 1 ? ( backgroundWidth - slideWidth ) / ( horizontalSlideCount-1 ) : 0;\n\t\t\t}\n\n\t\t\thorizontalOffset = horizontalOffsetMultiplier * indices.h * -1;\n\n\t\t\tlet slideHeight = this.element.offsetHeight,\n\t\t\t\tverticalSlideCount = verticalSlides.length,\n\t\t\t\tverticalOffsetMultiplier,\n\t\t\t\tverticalOffset;\n\n\t\t\tif( typeof this.Reveal.getConfig().parallaxBackgroundVertical === 'number' ) {\n\t\t\t\tverticalOffsetMultiplier = this.Reveal.getConfig().parallaxBackgroundVertical;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tverticalOffsetMultiplier = ( backgroundHeight - slideHeight ) / ( verticalSlideCount-1 );\n\t\t\t}\n\n\t\t\tverticalOffset = verticalSlideCount > 0 ? verticalOffsetMultiplier * indices.v : 0;\n\n\t\t\tthis.element.style.backgroundPosition = horizontalOffset + 'px ' + -verticalOffset + 'px';\n\n\t\t}\n\n\t}\n\n}\n","var $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar un$Slice = require('../internals/array-slice');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (isConstructor(Constructor) && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return un$Slice(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","\nexport const SLIDES_SELECTOR = '.slides section';\nexport const HORIZONTAL_SLIDES_SELECTOR = '.slides>section';\nexport const VERTICAL_SLIDES_SELECTOR = '.slides>section.present>section';\n\n// Methods that may not be invoked via the postMessage API\nexport const POST_MESSAGE_METHOD_BLACKLIST = /registerPlugin|registerKeyboardShortcut|addKeyBinding|addEventListener/;\n\n// Regex for retrieving the fragment style from a class attribute\nexport const FRAGMENT_STYLE_REGEX = /fade-(down|up|right|left|out|in-then-out|in-then-semi-out)|semi-fade-out|current-visible|shrink|grow/;","import { queryAll, extend, createStyleSheet, matches, closest } from '../utils/util.js'\nimport { FRAGMENT_STYLE_REGEX } from '../utils/constants.js'\n\n// Counter used to generate unique IDs for auto-animated elements\nlet autoAnimateCounter = 0;\n\n/**\n * Automatically animates matching elements across\n * slides with the [data-auto-animate] attribute.\n */\nexport default class AutoAnimate {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\t/**\n\t * Runs an auto-animation between the given slides.\n\t *\n\t * @param {HTMLElement} fromSlide\n\t * @param {HTMLElement} toSlide\n\t */\n\trun( fromSlide, toSlide ) {\n\n\t\t// Clean up after prior animations\n\t\tthis.reset();\n\n\t\tlet allSlides = this.Reveal.getSlides();\n\t\tlet toSlideIndex = allSlides.indexOf( toSlide );\n\t\tlet fromSlideIndex = allSlides.indexOf( fromSlide );\n\n\t\t// Ensure that both slides are auto-animate targets with the same data-auto-animate-id value\n\t\t// (including null if absent on both) and that data-auto-animate-restart isn't set on the\n\t\t// physically latter slide (independent of slide direction)\n\t\tif( fromSlide.hasAttribute( 'data-auto-animate' ) && toSlide.hasAttribute( 'data-auto-animate' )\n\t\t\t\t&& fromSlide.getAttribute( 'data-auto-animate-id' ) === toSlide.getAttribute( 'data-auto-animate-id' ) \n\t\t\t\t&& !( toSlideIndex > fromSlideIndex ? toSlide : fromSlide ).hasAttribute( 'data-auto-animate-restart' ) ) {\n\n\t\t\t// Create a new auto-animate sheet\n\t\t\tthis.autoAnimateStyleSheet = this.autoAnimateStyleSheet || createStyleSheet();\n\n\t\t\tlet animationOptions = this.getAutoAnimateOptions( toSlide );\n\n\t\t\t// Set our starting state\n\t\t\tfromSlide.dataset.autoAnimate = 'pending';\n\t\t\ttoSlide.dataset.autoAnimate = 'pending';\n\n\t\t\t// Flag the navigation direction, needed for fragment buildup\n\t\t\tanimationOptions.slideDirection = toSlideIndex > fromSlideIndex ? 'forward' : 'backward';\n\n\t\t\t// Inject our auto-animate styles for this transition\n\t\t\tlet css = this.getAutoAnimatableElements( fromSlide, toSlide ).map( elements => {\n\t\t\t\treturn this.autoAnimateElements( elements.from, elements.to, elements.options || {}, animationOptions, autoAnimateCounter++ );\n\t\t\t} );\n\n\t\t\t// Animate unmatched elements, if enabled\n\t\t\tif( toSlide.dataset.autoAnimateUnmatched !== 'false' && this.Reveal.getConfig().autoAnimateUnmatched === true ) {\n\n\t\t\t\t// Our default timings for unmatched elements\n\t\t\t\tlet defaultUnmatchedDuration = animationOptions.duration * 0.8,\n\t\t\t\t\tdefaultUnmatchedDelay = animationOptions.duration * 0.2;\n\n\t\t\t\tthis.getUnmatchedAutoAnimateElements( toSlide ).forEach( unmatchedElement => {\n\n\t\t\t\t\tlet unmatchedOptions = this.getAutoAnimateOptions( unmatchedElement, animationOptions );\n\t\t\t\t\tlet id = 'unmatched';\n\n\t\t\t\t\t// If there is a duration or delay set specifically for this\n\t\t\t\t\t// element our unmatched elements should adhere to those\n\t\t\t\t\tif( unmatchedOptions.duration !== animationOptions.duration || unmatchedOptions.delay !== animationOptions.delay ) {\n\t\t\t\t\t\tid = 'unmatched-' + autoAnimateCounter++;\n\t\t\t\t\t\tcss.push( `[data-auto-animate=\"running\"] [data-auto-animate-target=\"${id}\"] { transition: opacity ${unmatchedOptions.duration}s ease ${unmatchedOptions.delay}s; }` );\n\t\t\t\t\t}\n\n\t\t\t\t\tunmatchedElement.dataset.autoAnimateTarget = id;\n\n\t\t\t\t}, this );\n\n\t\t\t\t// Our default transition for unmatched elements\n\t\t\t\tcss.push( `[data-auto-animate=\"running\"] [data-auto-animate-target=\"unmatched\"] { transition: opacity ${defaultUnmatchedDuration}s ease ${defaultUnmatchedDelay}s; }` );\n\n\t\t\t}\n\n\t\t\t// Setting the whole chunk of CSS at once is the most\n\t\t\t// efficient way to do this. Using sheet.insertRule\n\t\t\t// is multiple factors slower.\n\t\t\tthis.autoAnimateStyleSheet.innerHTML = css.join( '' );\n\n\t\t\t// Start the animation next cycle\n\t\t\trequestAnimationFrame( () => {\n\t\t\t\tif( this.autoAnimateStyleSheet ) {\n\t\t\t\t\t// This forces our newly injected styles to be applied in Firefox\n\t\t\t\t\tgetComputedStyle( this.autoAnimateStyleSheet ).fontWeight;\n\n\t\t\t\t\ttoSlide.dataset.autoAnimate = 'running';\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\ttype: 'autoanimate',\n\t\t\t\tdata: {\n\t\t\t\t\tfromSlide,\n\t\t\t\t\ttoSlide,\n\t\t\t\t\tsheet: this.autoAnimateStyleSheet\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Rolls back all changes that we've made to the DOM so\n\t * that as part of animating.\n\t */\n\treset() {\n\n\t\t// Reset slides\n\t\tqueryAll( this.Reveal.getRevealElement(), '[data-auto-animate]:not([data-auto-animate=\"\"])' ).forEach( element => {\n\t\t\telement.dataset.autoAnimate = '';\n\t\t} );\n\n\t\t// Reset elements\n\t\tqueryAll( this.Reveal.getRevealElement(), '[data-auto-animate-target]' ).forEach( element => {\n\t\t\tdelete element.dataset.autoAnimateTarget;\n\t\t} );\n\n\t\t// Remove the animation sheet\n\t\tif( this.autoAnimateStyleSheet && this.autoAnimateStyleSheet.parentNode ) {\n\t\t\tthis.autoAnimateStyleSheet.parentNode.removeChild( this.autoAnimateStyleSheet );\n\t\t\tthis.autoAnimateStyleSheet = null;\n\t\t}\n\n\t}\n\n\t/**\n\t * Creates a FLIP animation where the `to` element starts out\n\t * in the `from` element position and animates to its original\n\t * state.\n\t *\n\t * @param {HTMLElement} from\n\t * @param {HTMLElement} to\n\t * @param {Object} elementOptions Options for this element pair\n\t * @param {Object} animationOptions Options set at the slide level\n\t * @param {String} id Unique ID that we can use to identify this\n\t * auto-animate element in the DOM\n\t */\n\tautoAnimateElements( from, to, elementOptions, animationOptions, id ) {\n\n\t\t// 'from' elements are given a data-auto-animate-target with no value,\n\t\t// 'to' elements are are given a data-auto-animate-target with an ID\n\t\tfrom.dataset.autoAnimateTarget = '';\n\t\tto.dataset.autoAnimateTarget = id;\n\n\t\t// Each element may override any of the auto-animate options\n\t\t// like transition easing, duration and delay via data-attributes\n\t\tlet options = this.getAutoAnimateOptions( to, animationOptions );\n\n\t\t// If we're using a custom element matcher the element options\n\t\t// may contain additional transition overrides\n\t\tif( typeof elementOptions.delay !== 'undefined' ) options.delay = elementOptions.delay;\n\t\tif( typeof elementOptions.duration !== 'undefined' ) options.duration = elementOptions.duration;\n\t\tif( typeof elementOptions.easing !== 'undefined' ) options.easing = elementOptions.easing;\n\n\t\tlet fromProps = this.getAutoAnimatableProperties( 'from', from, elementOptions ),\n\t\t\ttoProps = this.getAutoAnimatableProperties( 'to', to, elementOptions );\n\n\t\t// Maintain fragment visibility for matching elements when\n\t\t// we're navigating forwards, this way the viewer won't need\n\t\t// to step through the same fragments twice\n\t\tif( to.classList.contains( 'fragment' ) ) {\n\n\t\t\t// Don't auto-animate the opacity of fragments to avoid\n\t\t\t// conflicts with fragment animations\n\t\t\tdelete toProps.styles['opacity'];\n\n\t\t\tif( from.classList.contains( 'fragment' ) ) {\n\n\t\t\t\tlet fromFragmentStyle = ( from.className.match( FRAGMENT_STYLE_REGEX ) || [''] )[0];\n\t\t\t\tlet toFragmentStyle = ( to.className.match( FRAGMENT_STYLE_REGEX ) || [''] )[0];\n\n\t\t\t\t// Only skip the fragment if the fragment animation style\n\t\t\t\t// remains unchanged\n\t\t\t\tif( fromFragmentStyle === toFragmentStyle && animationOptions.slideDirection === 'forward' ) {\n\t\t\t\t\tto.classList.add( 'visible', 'disabled' );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// If translation and/or scaling are enabled, css transform\n\t\t// the 'to' element so that it matches the position and size\n\t\t// of the 'from' element\n\t\tif( elementOptions.translate !== false || elementOptions.scale !== false ) {\n\n\t\t\tlet presentationScale = this.Reveal.getScale();\n\n\t\t\tlet delta = {\n\t\t\t\tx: ( fromProps.x - toProps.x ) / presentationScale,\n\t\t\t\ty: ( fromProps.y - toProps.y ) / presentationScale,\n\t\t\t\tscaleX: fromProps.width / toProps.width,\n\t\t\t\tscaleY: fromProps.height / toProps.height\n\t\t\t};\n\n\t\t\t// Limit decimal points to avoid 0.0001px blur and stutter\n\t\t\tdelta.x = Math.round( delta.x * 1000 ) / 1000;\n\t\t\tdelta.y = Math.round( delta.y * 1000 ) / 1000;\n\t\t\tdelta.scaleX = Math.round( delta.scaleX * 1000 ) / 1000;\n\t\t\tdelta.scaleX = Math.round( delta.scaleX * 1000 ) / 1000;\n\n\t\t\tlet translate = elementOptions.translate !== false && ( delta.x !== 0 || delta.y !== 0 ),\n\t\t\t\tscale = elementOptions.scale !== false && ( delta.scaleX !== 0 || delta.scaleY !== 0 );\n\n\t\t\t// No need to transform if nothing's changed\n\t\t\tif( translate || scale ) {\n\n\t\t\t\tlet transform = [];\n\n\t\t\t\tif( translate ) transform.push( `translate(${delta.x}px, ${delta.y}px)` );\n\t\t\t\tif( scale ) transform.push( `scale(${delta.scaleX}, ${delta.scaleY})` );\n\n\t\t\t\tfromProps.styles['transform'] = transform.join( ' ' );\n\t\t\t\tfromProps.styles['transform-origin'] = 'top left';\n\n\t\t\t\ttoProps.styles['transform'] = 'none';\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Delete all unchanged 'to' styles\n\t\tfor( let propertyName in toProps.styles ) {\n\t\t\tconst toValue = toProps.styles[propertyName];\n\t\t\tconst fromValue = fromProps.styles[propertyName];\n\n\t\t\tif( toValue === fromValue ) {\n\t\t\t\tdelete toProps.styles[propertyName];\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// If these property values were set via a custom matcher providing\n\t\t\t\t// an explicit 'from' and/or 'to' value, we always inject those values.\n\t\t\t\tif( toValue.explicitValue === true ) {\n\t\t\t\t\ttoProps.styles[propertyName] = toValue.value;\n\t\t\t\t}\n\n\t\t\t\tif( fromValue.explicitValue === true ) {\n\t\t\t\t\tfromProps.styles[propertyName] = fromValue.value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet css = '';\n\n\t\tlet toStyleProperties = Object.keys( toProps.styles );\n\n\t\t// Only create animate this element IF at least one style\n\t\t// property has changed\n\t\tif( toStyleProperties.length > 0 ) {\n\n\t\t\t// Instantly move to the 'from' state\n\t\t\tfromProps.styles['transition'] = 'none';\n\n\t\t\t// Animate towards the 'to' state\n\t\t\ttoProps.styles['transition'] = `all ${options.duration}s ${options.easing} ${options.delay}s`;\n\t\t\ttoProps.styles['transition-property'] = toStyleProperties.join( ', ' );\n\t\t\ttoProps.styles['will-change'] = toStyleProperties.join( ', ' );\n\n\t\t\t// Build up our custom CSS. We need to override inline styles\n\t\t\t// so we need to make our styles vErY IMPORTANT!1!!\n\t\t\tlet fromCSS = Object.keys( fromProps.styles ).map( propertyName => {\n\t\t\t\treturn propertyName + ': ' + fromProps.styles[propertyName] + ' !important;';\n\t\t\t} ).join( '' );\n\n\t\t\tlet toCSS = Object.keys( toProps.styles ).map( propertyName => {\n\t\t\t\treturn propertyName + ': ' + toProps.styles[propertyName] + ' !important;';\n\t\t\t} ).join( '' );\n\n\t\t\tcss = \t'[data-auto-animate-target=\"'+ id +'\"] {'+ fromCSS +'}' +\n\t\t\t\t\t'[data-auto-animate=\"running\"] [data-auto-animate-target=\"'+ id +'\"] {'+ toCSS +'}';\n\n\t\t}\n\n\t\treturn css;\n\n\t}\n\n\t/**\n\t * Returns the auto-animate options for the given element.\n\t *\n\t * @param {HTMLElement} element Element to pick up options\n\t * from, either a slide or an animation target\n\t * @param {Object} [inheritedOptions] Optional set of existing\n\t * options\n\t */\n\tgetAutoAnimateOptions( element, inheritedOptions ) {\n\n\t\tlet options = {\n\t\t\teasing: this.Reveal.getConfig().autoAnimateEasing,\n\t\t\tduration: this.Reveal.getConfig().autoAnimateDuration,\n\t\t\tdelay: 0\n\t\t};\n\n\t\toptions = extend( options, inheritedOptions );\n\n\t\t// Inherit options from parent elements\n\t\tif( element.parentNode ) {\n\t\t\tlet autoAnimatedParent = closest( element.parentNode, '[data-auto-animate-target]' );\n\t\t\tif( autoAnimatedParent ) {\n\t\t\t\toptions = this.getAutoAnimateOptions( autoAnimatedParent, options );\n\t\t\t}\n\t\t}\n\n\t\tif( element.dataset.autoAnimateEasing ) {\n\t\t\toptions.easing = element.dataset.autoAnimateEasing;\n\t\t}\n\n\t\tif( element.dataset.autoAnimateDuration ) {\n\t\t\toptions.duration = parseFloat( element.dataset.autoAnimateDuration );\n\t\t}\n\n\t\tif( element.dataset.autoAnimateDelay ) {\n\t\t\toptions.delay = parseFloat( element.dataset.autoAnimateDelay );\n\t\t}\n\n\t\treturn options;\n\n\t}\n\n\t/**\n\t * Returns an object containing all of the properties\n\t * that can be auto-animated for the given element and\n\t * their current computed values.\n\t *\n\t * @param {String} direction 'from' or 'to'\n\t */\n\tgetAutoAnimatableProperties( direction, element, elementOptions ) {\n\n\t\tlet config = this.Reveal.getConfig();\n\n\t\tlet properties = { styles: [] };\n\n\t\t// Position and size\n\t\tif( elementOptions.translate !== false || elementOptions.scale !== false ) {\n\t\t\tlet bounds;\n\n\t\t\t// Custom auto-animate may optionally return a custom tailored\n\t\t\t// measurement function\n\t\t\tif( typeof elementOptions.measure === 'function' ) {\n\t\t\t\tbounds = elementOptions.measure( element );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif( config.center ) {\n\t\t\t\t\t// More precise, but breaks when used in combination\n\t\t\t\t\t// with zoom for scaling the deck ¯\\_(ツ)_/¯\n\t\t\t\t\tbounds = element.getBoundingClientRect();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet scale = this.Reveal.getScale();\n\t\t\t\t\tbounds = {\n\t\t\t\t\t\tx: element.offsetLeft * scale,\n\t\t\t\t\t\ty: element.offsetTop * scale,\n\t\t\t\t\t\twidth: element.offsetWidth * scale,\n\t\t\t\t\t\theight: element.offsetHeight * scale\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tproperties.x = bounds.x;\n\t\t\tproperties.y = bounds.y;\n\t\t\tproperties.width = bounds.width;\n\t\t\tproperties.height = bounds.height;\n\t\t}\n\n\t\tconst computedStyles = getComputedStyle( element );\n\n\t\t// CSS styles\n\t\t( elementOptions.styles || config.autoAnimateStyles ).forEach( style => {\n\t\t\tlet value;\n\n\t\t\t// `style` is either the property name directly, or an object\n\t\t\t// definition of a style property\n\t\t\tif( typeof style === 'string' ) style = { property: style };\n\n\t\t\tif( typeof style.from !== 'undefined' && direction === 'from' ) {\n\t\t\t\tvalue = { value: style.from, explicitValue: true };\n\t\t\t}\n\t\t\telse if( typeof style.to !== 'undefined' && direction === 'to' ) {\n\t\t\t\tvalue = { value: style.to, explicitValue: true };\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvalue = computedStyles[style.property];\n\t\t\t}\n\n\t\t\tif( value !== '' ) {\n\t\t\t\tproperties.styles[style.property] = value;\n\t\t\t}\n\t\t} );\n\n\t\treturn properties;\n\n\t}\n\n\t/**\n\t * Get a list of all element pairs that we can animate\n\t * between the given slides.\n\t *\n\t * @param {HTMLElement} fromSlide\n\t * @param {HTMLElement} toSlide\n\t *\n\t * @return {Array} Each value is an array where [0] is\n\t * the element we're animating from and [1] is the\n\t * element we're animating to\n\t */\n\tgetAutoAnimatableElements( fromSlide, toSlide ) {\n\n\t\tlet matcher = typeof this.Reveal.getConfig().autoAnimateMatcher === 'function' ? this.Reveal.getConfig().autoAnimateMatcher : this.getAutoAnimatePairs;\n\n\t\tlet pairs = matcher.call( this, fromSlide, toSlide );\n\n\t\tlet reserved = [];\n\n\t\t// Remove duplicate pairs\n\t\treturn pairs.filter( ( pair, index ) => {\n\t\t\tif( reserved.indexOf( pair.to ) === -1 ) {\n\t\t\t\treserved.push( pair.to );\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} );\n\n\t}\n\n\t/**\n\t * Identifies matching elements between slides.\n\t *\n\t * You can specify a custom matcher function by using\n\t * the `autoAnimateMatcher` config option.\n\t */\n\tgetAutoAnimatePairs( fromSlide, toSlide ) {\n\n\t\tlet pairs = [];\n\n\t\tconst codeNodes = 'pre';\n\t\tconst textNodes = 'h1, h2, h3, h4, h5, h6, p, li';\n\t\tconst mediaNodes = 'img, video, iframe';\n\n\t\t// Eplicit matches via data-id\n\t\tthis.findAutoAnimateMatches( pairs, fromSlide, toSlide, '[data-id]', node => {\n\t\t\treturn node.nodeName + ':::' + node.getAttribute( 'data-id' );\n\t\t} );\n\n\t\t// Text\n\t\tthis.findAutoAnimateMatches( pairs, fromSlide, toSlide, textNodes, node => {\n\t\t\treturn node.nodeName + ':::' + node.innerText;\n\t\t} );\n\n\t\t// Media\n\t\tthis.findAutoAnimateMatches( pairs, fromSlide, toSlide, mediaNodes, node => {\n\t\t\treturn node.nodeName + ':::' + ( node.getAttribute( 'src' ) || node.getAttribute( 'data-src' ) );\n\t\t} );\n\n\t\t// Code\n\t\tthis.findAutoAnimateMatches( pairs, fromSlide, toSlide, codeNodes, node => {\n\t\t\treturn node.nodeName + ':::' + node.innerText;\n\t\t} );\n\n\t\tpairs.forEach( pair => {\n\n\t\t\t// Disable scale transformations on text nodes, we transition\n\t\t\t// each individual text property instead\n\t\t\tif( matches( pair.from, textNodes ) ) {\n\t\t\t\tpair.options = { scale: false };\n\t\t\t}\n\t\t\t// Animate individual lines of code\n\t\t\telse if( matches( pair.from, codeNodes ) ) {\n\n\t\t\t\t// Transition the code block's width and height instead of scaling\n\t\t\t\t// to prevent its content from being squished\n\t\t\t\tpair.options = { scale: false, styles: [ 'width', 'height' ] };\n\n\t\t\t\t// Lines of code\n\t\t\t\tthis.findAutoAnimateMatches( pairs, pair.from, pair.to, '.hljs .hljs-ln-code', node => {\n\t\t\t\t\treturn node.textContent;\n\t\t\t\t}, {\n\t\t\t\t\tscale: false,\n\t\t\t\t\tstyles: [],\n\t\t\t\t\tmeasure: this.getLocalBoundingBox.bind( this )\n\t\t\t\t} );\n\n\t\t\t\t// Line numbers\n\t\t\t\tthis.findAutoAnimateMatches( pairs, pair.from, pair.to, '.hljs .hljs-ln-line[data-line-number]', node => {\n\t\t\t\t\treturn node.getAttribute( 'data-line-number' );\n\t\t\t\t}, {\n\t\t\t\t\tscale: false,\n\t\t\t\t\tstyles: [ 'width' ],\n\t\t\t\t\tmeasure: this.getLocalBoundingBox.bind( this )\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}, this );\n\n\t\treturn pairs;\n\n\t}\n\n\t/**\n\t * Helper method which returns a bounding box based on\n\t * the given elements offset coordinates.\n\t *\n\t * @param {HTMLElement} element\n\t * @return {Object} x, y, width, height\n\t */\n\tgetLocalBoundingBox( element ) {\n\n\t\tconst presentationScale = this.Reveal.getScale();\n\n\t\treturn {\n\t\t\tx: Math.round( ( element.offsetLeft * presentationScale ) * 100 ) / 100,\n\t\t\ty: Math.round( ( element.offsetTop * presentationScale ) * 100 ) / 100,\n\t\t\twidth: Math.round( ( element.offsetWidth * presentationScale ) * 100 ) / 100,\n\t\t\theight: Math.round( ( element.offsetHeight * presentationScale ) * 100 ) / 100\n\t\t};\n\n\t}\n\n\t/**\n\t * Finds matching elements between two slides.\n\t *\n\t * @param {Array} pairs \tList of pairs to push matches to\n\t * @param {HTMLElement} fromScope Scope within the from element exists\n\t * @param {HTMLElement} toScope Scope within the to element exists\n\t * @param {String} selector CSS selector of the element to match\n\t * @param {Function} serializer A function that accepts an element and returns\n\t * a stringified ID based on its contents\n\t * @param {Object} animationOptions Optional config options for this pair\n\t */\n\tfindAutoAnimateMatches( pairs, fromScope, toScope, selector, serializer, animationOptions ) {\n\n\t\tlet fromMatches = {};\n\t\tlet toMatches = {};\n\n\t\t[].slice.call( fromScope.querySelectorAll( selector ) ).forEach( ( element, i ) => {\n\t\t\tconst key = serializer( element );\n\t\t\tif( typeof key === 'string' && key.length ) {\n\t\t\t\tfromMatches[key] = fromMatches[key] || [];\n\t\t\t\tfromMatches[key].push( element );\n\t\t\t}\n\t\t} );\n\n\t\t[].slice.call( toScope.querySelectorAll( selector ) ).forEach( ( element, i ) => {\n\t\t\tconst key = serializer( element );\n\t\t\ttoMatches[key] = toMatches[key] || [];\n\t\t\ttoMatches[key].push( element );\n\n\t\t\tlet fromElement;\n\n\t\t\t// Retrieve the 'from' element\n\t\t\tif( fromMatches[key] ) {\n\t\t\t\tconst pimaryIndex = toMatches[key].length - 1;\n\t\t\t\tconst secondaryIndex = fromMatches[key].length - 1;\n\n\t\t\t\t// If there are multiple identical from elements, retrieve\n\t\t\t\t// the one at the same index as our to-element.\n\t\t\t\tif( fromMatches[key][ pimaryIndex ] ) {\n\t\t\t\t\tfromElement = fromMatches[key][ pimaryIndex ];\n\t\t\t\t\tfromMatches[key][ pimaryIndex ] = null;\n\t\t\t\t}\n\t\t\t\t// If there are no matching from-elements at the same index,\n\t\t\t\t// use the last one.\n\t\t\t\telse if( fromMatches[key][ secondaryIndex ] ) {\n\t\t\t\t\tfromElement = fromMatches[key][ secondaryIndex ];\n\t\t\t\t\tfromMatches[key][ secondaryIndex ] = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we've got a matching pair, push it to the list of pairs\n\t\t\tif( fromElement ) {\n\t\t\t\tpairs.push({\n\t\t\t\t\tfrom: fromElement,\n\t\t\t\t\tto: element,\n\t\t\t\t\toptions: animationOptions\n\t\t\t\t});\n\t\t\t}\n\t\t} );\n\n\t}\n\n\t/**\n\t * Returns a all elements within the given scope that should\n\t * be considered unmatched in an auto-animate transition. If\n\t * fading of unmatched elements is turned on, these elements\n\t * will fade when going between auto-animate slides.\n\t *\n\t * Note that parents of auto-animate targets are NOT considerd\n\t * unmatched since fading them would break the auto-animation.\n\t *\n\t * @param {HTMLElement} rootElement\n\t * @return {Array}\n\t */\n\tgetUnmatchedAutoAnimateElements( rootElement ) {\n\n\t\treturn [].slice.call( rootElement.children ).reduce( ( result, element ) => {\n\n\t\t\tconst containsAnimatedElements = element.querySelector( '[data-auto-animate-target]' );\n\n\t\t\t// The element is unmatched if\n\t\t\t// - It is not an auto-animate target\n\t\t\t// - It does not contain any auto-animate targets\n\t\t\tif( !element.hasAttribute( 'data-auto-animate-target' ) && !containsAnimatedElements ) {\n\t\t\t\tresult.push( element );\n\t\t\t}\n\n\t\t\tif( element.querySelector( '[data-auto-animate-target]' ) ) {\n\t\t\t\tresult = result.concat( this.getUnmatchedAutoAnimateElements( element ) );\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}, [] );\n\n\t}\n\n}\n","var arraySlice = require('../internals/array-slice-simple');\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n array,\n mergeSort(arraySlice(array, 0, middle), comparefn),\n mergeSort(arraySlice(array, middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n\n while (lindex < llength || rindex < rlength) {\n array[lindex + rindex] = (lindex < llength && rindex < rlength)\n ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n : lindex < llength ? left[lindex++] : right[rindex++];\n } return array;\n};\n\nmodule.exports = mergeSort;\n","var userAgent = require('../internals/engine-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n","var UA = require('../internals/engine-user-agent');\n\nmodule.exports = /MSIE|Trident/.test(UA);\n","var userAgent = require('../internals/engine-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar internalSort = require('../internals/array-sort');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar test = [];\nvar un$Sort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 70;\n if (FF && FF > 3) return;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 603;\n\n var result = '';\n var code, chr, value, index;\n\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n for (code = 65; code < 76; code++) {\n chr = String.fromCharCode(code);\n\n switch (code) {\n case 66: case 69: case 70: case 72: value = 3; break;\n case 68: case 71: value = 4; break;\n default: value = 2;\n }\n\n for (index = 0; index < 47; index++) {\n test.push({ k: chr + index, v: value });\n }\n }\n\n test.sort(function (a, b) { return b.v - a.v; });\n\n for (index = 0; index < test.length; index++) {\n chr = test[index].k.charAt(0);\n if (result.charAt(result.length - 1) !== chr) result += chr;\n }\n\n return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (y === undefined) return -1;\n if (x === undefined) return 1;\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n return toString(x) > toString(y) ? 1 : -1;\n };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n\n var array = toObject(this);\n\n if (STABLE_SORT) return comparefn === undefined ? un$Sort(array) : un$Sort(array, comparefn);\n\n var items = [];\n var arrayLength = lengthOfArrayLike(array);\n var itemsLength, index;\n\n for (index = 0; index < arrayLength; index++) {\n if (index in array) push(items, array[index]);\n }\n\n internalSort(items, getSortCompare(comparefn));\n\n itemsLength = items.length;\n index = 0;\n\n while (index < itemsLength) array[index] = items[index++];\n while (index < arrayLength) delete array[index++];\n\n return array;\n }\n});\n","import { extend, queryAll } from '../utils/util.js'\n\n/**\n * Handles sorting and navigation of slide fragments.\n * Fragments are elements within a slide that are\n * revealed/animated incrementally.\n */\nexport default class Fragments {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.fragments === false ) {\n\t\t\tthis.disable();\n\t\t}\n\t\telse if( oldConfig.fragments === false ) {\n\t\t\tthis.enable();\n\t\t}\n\n\t}\n\n\t/**\n\t * If fragments are disabled in the deck, they should all be\n\t * visible rather than stepped through.\n\t */\n\tdisable() {\n\n\t\tqueryAll( this.Reveal.getSlidesElement(), '.fragment' ).forEach( element => {\n\t\t\telement.classList.add( 'visible' );\n\t\t\telement.classList.remove( 'current-fragment' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Reverse of #disable(). Only called if fragments have\n\t * previously been disabled.\n\t */\n\tenable() {\n\n\t\tqueryAll( this.Reveal.getSlidesElement(), '.fragment' ).forEach( element => {\n\t\t\telement.classList.remove( 'visible' );\n\t\t\telement.classList.remove( 'current-fragment' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Returns an object describing the available fragment\n\t * directions.\n\t *\n\t * @return {{prev: boolean, next: boolean}}\n\t */\n\tavailableRoutes() {\n\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tif( currentSlide && this.Reveal.getConfig().fragments ) {\n\t\t\tlet fragments = currentSlide.querySelectorAll( '.fragment:not(.disabled)' );\n\t\t\tlet hiddenFragments = currentSlide.querySelectorAll( '.fragment:not(.disabled):not(.visible)' );\n\n\t\t\treturn {\n\t\t\t\tprev: fragments.length - hiddenFragments.length > 0,\n\t\t\t\tnext: !!hiddenFragments.length\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\treturn { prev: false, next: false };\n\t\t}\n\n\t}\n\n\t/**\n\t * Return a sorted fragments list, ordered by an increasing\n\t * \"data-fragment-index\" attribute.\n\t *\n\t * Fragments will be revealed in the order that they are returned by\n\t * this function, so you can use the index attributes to control the\n\t * order of fragment appearance.\n\t *\n\t * To maintain a sensible default fragment order, fragments are presumed\n\t * to be passed in document order. This function adds a \"fragment-index\"\n\t * attribute to each node if such an attribute is not already present,\n\t * and sets that attribute to an integer value which is the position of\n\t * the fragment within the fragments list.\n\t *\n\t * @param {object[]|*} fragments\n\t * @param {boolean} grouped If true the returned array will contain\n\t * nested arrays for all fragments with the same index\n\t * @return {object[]} sorted Sorted array of fragments\n\t */\n\tsort( fragments, grouped = false ) {\n\n\t\tfragments = Array.from( fragments );\n\n\t\tlet ordered = [],\n\t\t\tunordered = [],\n\t\t\tsorted = [];\n\n\t\t// Group ordered and unordered elements\n\t\tfragments.forEach( fragment => {\n\t\t\tif( fragment.hasAttribute( 'data-fragment-index' ) ) {\n\t\t\t\tlet index = parseInt( fragment.getAttribute( 'data-fragment-index' ), 10 );\n\n\t\t\t\tif( !ordered[index] ) {\n\t\t\t\t\tordered[index] = [];\n\t\t\t\t}\n\n\t\t\t\tordered[index].push( fragment );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tunordered.push( [ fragment ] );\n\t\t\t}\n\t\t} );\n\n\t\t// Append fragments without explicit indices in their\n\t\t// DOM order\n\t\tordered = ordered.concat( unordered );\n\n\t\t// Manually count the index up per group to ensure there\n\t\t// are no gaps\n\t\tlet index = 0;\n\n\t\t// Push all fragments in their sorted order to an array,\n\t\t// this flattens the groups\n\t\tordered.forEach( group => {\n\t\t\tgroup.forEach( fragment => {\n\t\t\t\tsorted.push( fragment );\n\t\t\t\tfragment.setAttribute( 'data-fragment-index', index );\n\t\t\t} );\n\n\t\t\tindex ++;\n\t\t} );\n\n\t\treturn grouped === true ? ordered : sorted;\n\n\t}\n\n\t/**\n\t * Sorts and formats all of fragments in the\n\t * presentation.\n\t */\n\tsortAll() {\n\n\t\tthis.Reveal.getHorizontalSlides().forEach( horizontalSlide => {\n\n\t\t\tlet verticalSlides = queryAll( horizontalSlide, 'section' );\n\t\t\tverticalSlides.forEach( ( verticalSlide, y ) => {\n\n\t\t\t\tthis.sort( verticalSlide.querySelectorAll( '.fragment' ) );\n\n\t\t\t}, this );\n\n\t\t\tif( verticalSlides.length === 0 ) this.sort( horizontalSlide.querySelectorAll( '.fragment' ) );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Refreshes the fragments on the current slide so that they\n\t * have the appropriate classes (.visible + .current-fragment).\n\t *\n\t * @param {number} [index] The index of the current fragment\n\t * @param {array} [fragments] Array containing all fragments\n\t * in the current slide\n\t *\n\t * @return {{shown: array, hidden: array}}\n\t */\n\tupdate( index, fragments ) {\n\n\t\tlet changedFragments = {\n\t\t\tshown: [],\n\t\t\thidden: []\n\t\t};\n\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tif( currentSlide && this.Reveal.getConfig().fragments ) {\n\n\t\t\tfragments = fragments || this.sort( currentSlide.querySelectorAll( '.fragment' ) );\n\n\t\t\tif( fragments.length ) {\n\n\t\t\t\tlet maxIndex = 0;\n\n\t\t\t\tif( typeof index !== 'number' ) {\n\t\t\t\t\tlet currentFragment = this.sort( currentSlide.querySelectorAll( '.fragment.visible' ) ).pop();\n\t\t\t\t\tif( currentFragment ) {\n\t\t\t\t\t\tindex = parseInt( currentFragment.getAttribute( 'data-fragment-index' ) || 0, 10 );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tArray.from( fragments ).forEach( ( el, i ) => {\n\n\t\t\t\t\tif( el.hasAttribute( 'data-fragment-index' ) ) {\n\t\t\t\t\t\ti = parseInt( el.getAttribute( 'data-fragment-index' ), 10 );\n\t\t\t\t\t}\n\n\t\t\t\t\tmaxIndex = Math.max( maxIndex, i );\n\n\t\t\t\t\t// Visible fragments\n\t\t\t\t\tif( i <= index ) {\n\t\t\t\t\t\tlet wasVisible = el.classList.contains( 'visible' )\n\t\t\t\t\t\tel.classList.add( 'visible' );\n\t\t\t\t\t\tel.classList.remove( 'current-fragment' );\n\n\t\t\t\t\t\tif( i === index ) {\n\t\t\t\t\t\t\t// Announce the fragments one by one to the Screen Reader\n\t\t\t\t\t\t\tthis.Reveal.announceStatus( this.Reveal.getStatusText( el ) );\n\n\t\t\t\t\t\t\tel.classList.add( 'current-fragment' );\n\t\t\t\t\t\t\tthis.Reveal.slideContent.startEmbeddedContent( el );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif( !wasVisible ) {\n\t\t\t\t\t\t\tchangedFragments.shown.push( el )\n\t\t\t\t\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\t\t\t\t\ttarget: el,\n\t\t\t\t\t\t\t\ttype: 'visible',\n\t\t\t\t\t\t\t\tbubbles: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// Hidden fragments\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet wasVisible = el.classList.contains( 'visible' )\n\t\t\t\t\t\tel.classList.remove( 'visible' );\n\t\t\t\t\t\tel.classList.remove( 'current-fragment' );\n\n\t\t\t\t\t\tif( wasVisible ) {\n\t\t\t\t\t\t\tthis.Reveal.slideContent.stopEmbeddedContent( el );\n\t\t\t\t\t\t\tchangedFragments.hidden.push( el );\n\t\t\t\t\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\t\t\t\t\ttarget: el,\n\t\t\t\t\t\t\t\ttype: 'hidden',\n\t\t\t\t\t\t\t\tbubbles: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\t// Write the current fragment index to the slide <section>.\n\t\t\t\t// This can be used by end users to apply styles based on\n\t\t\t\t// the current fragment index.\n\t\t\t\tindex = typeof index === 'number' ? index : -1;\n\t\t\t\tindex = Math.max( Math.min( index, maxIndex ), -1 );\n\t\t\t\tcurrentSlide.setAttribute( 'data-fragment', index );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn changedFragments;\n\n\t}\n\n\t/**\n\t * Formats the fragments on the given slide so that they have\n\t * valid indices. Call this if fragments are changed in the DOM\n\t * after reveal.js has already initialized.\n\t *\n\t * @param {HTMLElement} slide\n\t * @return {Array} a list of the HTML fragments that were synced\n\t */\n\tsync( slide = this.Reveal.getCurrentSlide() ) {\n\n\t\treturn this.sort( slide.querySelectorAll( '.fragment' ) );\n\n\t}\n\n\t/**\n\t * Navigate to the specified slide fragment.\n\t *\n\t * @param {?number} index The index of the fragment that\n\t * should be shown, -1 means all are invisible\n\t * @param {number} offset Integer offset to apply to the\n\t * fragment index\n\t *\n\t * @return {boolean} true if a change was made in any\n\t * fragments visibility as part of this call\n\t */\n\tgoto( index, offset = 0 ) {\n\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tif( currentSlide && this.Reveal.getConfig().fragments ) {\n\n\t\t\tlet fragments = this.sort( currentSlide.querySelectorAll( '.fragment:not(.disabled)' ) );\n\t\t\tif( fragments.length ) {\n\n\t\t\t\t// If no index is specified, find the current\n\t\t\t\tif( typeof index !== 'number' ) {\n\t\t\t\t\tlet lastVisibleFragment = this.sort( currentSlide.querySelectorAll( '.fragment:not(.disabled).visible' ) ).pop();\n\n\t\t\t\t\tif( lastVisibleFragment ) {\n\t\t\t\t\t\tindex = parseInt( lastVisibleFragment.getAttribute( 'data-fragment-index' ) || 0, 10 );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tindex = -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply the offset if there is one\n\t\t\t\tindex += offset;\n\n\t\t\t\tlet changedFragments = this.update( index, fragments );\n\n\t\t\t\tif( changedFragments.hidden.length ) {\n\t\t\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\t\t\ttype: 'fragmenthidden',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tfragment: changedFragments.hidden[0],\n\t\t\t\t\t\t\tfragments: changedFragments.hidden\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif( changedFragments.shown.length ) {\n\t\t\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\t\t\ttype: 'fragmentshown',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tfragment: changedFragments.shown[0],\n\t\t\t\t\t\t\tfragments: changedFragments.shown\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthis.Reveal.controls.update();\n\t\t\t\tthis.Reveal.progress.update();\n\n\t\t\t\tif( this.Reveal.getConfig().fragmentInURL ) {\n\t\t\t\t\tthis.Reveal.location.writeURL();\n\t\t\t\t}\n\n\t\t\t\treturn !!( changedFragments.shown.length || changedFragments.hidden.length );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Navigate to the next slide fragment.\n\t *\n\t * @return {boolean} true if there was a next fragment,\n\t * false otherwise\n\t */\n\tnext() {\n\n\t\treturn this.goto( null, 1 );\n\n\t}\n\n\t/**\n\t * Navigate to the previous slide fragment.\n\t *\n\t * @return {boolean} true if there was a previous fragment,\n\t * false otherwise\n\t */\n\tprev() {\n\n\t\treturn this.goto( null, -1 );\n\n\t}\n\n}","import { SLIDES_SELECTOR } from '../utils/constants.js'\nimport { extend, queryAll, transformElement } from '../utils/util.js'\n\n/**\n * Handles all logic related to the overview mode\n * (birds-eye view of all slides).\n */\nexport default class Overview {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.active = false;\n\n\t\tthis.onSlideClicked = this.onSlideClicked.bind( this );\n\n\t}\n\n\t/**\n\t * Displays the overview of slides (quick nav) by scaling\n\t * down and arranging all slide elements.\n\t */\n\tactivate() {\n\n\t\t// Only proceed if enabled in config\n\t\tif( this.Reveal.getConfig().overview && !this.isActive() ) {\n\n\t\t\tthis.active = true;\n\n\t\t\tthis.Reveal.getRevealElement().classList.add( 'overview' );\n\n\t\t\t// Don't auto-slide while in overview mode\n\t\t\tthis.Reveal.cancelAutoSlide();\n\n\t\t\t// Move the backgrounds element into the slide container to\n\t\t\t// that the same scaling is applied\n\t\t\tthis.Reveal.getSlidesElement().appendChild( this.Reveal.getBackgroundsElement() );\n\n\t\t\t// Clicking on an overview slide navigates to it\n\t\t\tqueryAll( this.Reveal.getRevealElement(), SLIDES_SELECTOR ).forEach( slide => {\n\t\t\t\tif( !slide.classList.contains( 'stack' ) ) {\n\t\t\t\t\tslide.addEventListener( 'click', this.onSlideClicked, true );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Calculate slide sizes\n\t\t\tconst margin = 70;\n\t\t\tconst slideSize = this.Reveal.getComputedSlideSize();\n\t\t\tthis.overviewSlideWidth = slideSize.width + margin;\n\t\t\tthis.overviewSlideHeight = slideSize.height + margin;\n\n\t\t\t// Reverse in RTL mode\n\t\t\tif( this.Reveal.getConfig().rtl ) {\n\t\t\t\tthis.overviewSlideWidth = -this.overviewSlideWidth;\n\t\t\t}\n\n\t\t\tthis.Reveal.updateSlidesVisibility();\n\n\t\t\tthis.layout();\n\t\t\tthis.update();\n\n\t\t\tthis.Reveal.layout();\n\n\t\t\tconst indices = this.Reveal.getIndices();\n\n\t\t\t// Notify observers of the overview showing\n\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\ttype: 'overviewshown',\n\t\t\t\tdata: {\n\t\t\t\t\t'indexh': indices.h,\n\t\t\t\t\t'indexv': indices.v,\n\t\t\t\t\t'currentSlide': this.Reveal.getCurrentSlide()\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Uses CSS transforms to position all slides in a grid for\n\t * display inside of the overview mode.\n\t */\n\tlayout() {\n\n\t\t// Layout slides\n\t\tthis.Reveal.getHorizontalSlides().forEach( ( hslide, h ) => {\n\t\t\thslide.setAttribute( 'data-index-h', h );\n\t\t\ttransformElement( hslide, 'translate3d(' + ( h * this.overviewSlideWidth ) + 'px, 0, 0)' );\n\n\t\t\tif( hslide.classList.contains( 'stack' ) ) {\n\n\t\t\t\tqueryAll( hslide, 'section' ).forEach( ( vslide, v ) => {\n\t\t\t\t\tvslide.setAttribute( 'data-index-h', h );\n\t\t\t\t\tvslide.setAttribute( 'data-index-v', v );\n\n\t\t\t\t\ttransformElement( vslide, 'translate3d(0, ' + ( v * this.overviewSlideHeight ) + 'px, 0)' );\n\t\t\t\t} );\n\n\t\t\t}\n\t\t} );\n\n\t\t// Layout slide backgrounds\n\t\tArray.from( this.Reveal.getBackgroundsElement().childNodes ).forEach( ( hbackground, h ) => {\n\t\t\ttransformElement( hbackground, 'translate3d(' + ( h * this.overviewSlideWidth ) + 'px, 0, 0)' );\n\n\t\t\tqueryAll( hbackground, '.slide-background' ).forEach( ( vbackground, v ) => {\n\t\t\t\ttransformElement( vbackground, 'translate3d(0, ' + ( v * this.overviewSlideHeight ) + 'px, 0)' );\n\t\t\t} );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Moves the overview viewport to the current slides.\n\t * Called each time the current slide changes.\n\t */\n\tupdate() {\n\n\t\tconst vmin = Math.min( window.innerWidth, window.innerHeight );\n\t\tconst scale = Math.max( vmin / 5, 150 ) / vmin;\n\t\tconst indices = this.Reveal.getIndices();\n\n\t\tthis.Reveal.transformSlides( {\n\t\t\toverview: [\n\t\t\t\t'scale('+ scale +')',\n\t\t\t\t'translateX('+ ( -indices.h * this.overviewSlideWidth ) +'px)',\n\t\t\t\t'translateY('+ ( -indices.v * this.overviewSlideHeight ) +'px)'\n\t\t\t].join( ' ' )\n\t\t} );\n\n\t}\n\n\t/**\n\t * Exits the slide overview and enters the currently\n\t * active slide.\n\t */\n\tdeactivate() {\n\n\t\t// Only proceed if enabled in config\n\t\tif( this.Reveal.getConfig().overview ) {\n\n\t\t\tthis.active = false;\n\n\t\t\tthis.Reveal.getRevealElement().classList.remove( 'overview' );\n\n\t\t\t// Temporarily add a class so that transitions can do different things\n\t\t\t// depending on whether they are exiting/entering overview, or just\n\t\t\t// moving from slide to slide\n\t\t\tthis.Reveal.getRevealElement().classList.add( 'overview-deactivating' );\n\n\t\t\tsetTimeout( () => {\n\t\t\t\tthis.Reveal.getRevealElement().classList.remove( 'overview-deactivating' );\n\t\t\t}, 1 );\n\n\t\t\t// Move the background element back out\n\t\t\tthis.Reveal.getRevealElement().appendChild( this.Reveal.getBackgroundsElement() );\n\n\t\t\t// Clean up changes made to slides\n\t\t\tqueryAll( this.Reveal.getRevealElement(), SLIDES_SELECTOR ).forEach( slide => {\n\t\t\t\ttransformElement( slide, '' );\n\n\t\t\t\tslide.removeEventListener( 'click', this.onSlideClicked, true );\n\t\t\t} );\n\n\t\t\t// Clean up changes made to backgrounds\n\t\t\tqueryAll( this.Reveal.getBackgroundsElement(), '.slide-background' ).forEach( background => {\n\t\t\t\ttransformElement( background, '' );\n\t\t\t} );\n\n\t\t\tthis.Reveal.transformSlides( { overview: '' } );\n\n\t\t\tconst indices = this.Reveal.getIndices();\n\n\t\t\tthis.Reveal.slide( indices.h, indices.v );\n\t\t\tthis.Reveal.layout();\n\t\t\tthis.Reveal.cueAutoSlide();\n\n\t\t\t// Notify observers of the overview hiding\n\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\ttype: 'overviewhidden',\n\t\t\t\tdata: {\n\t\t\t\t\t'indexh': indices.h,\n\t\t\t\t\t'indexv': indices.v,\n\t\t\t\t\t'currentSlide': this.Reveal.getCurrentSlide()\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\t}\n\n\t/**\n\t * Toggles the slide overview mode on and off.\n\t *\n\t * @param {Boolean} [override] Flag which overrides the\n\t * toggle logic and forcibly sets the desired state. True means\n\t * overview is open, false means it's closed.\n\t */\n\ttoggle( override ) {\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? this.activate() : this.deactivate();\n\t\t}\n\t\telse {\n\t\t\tthis.isActive() ? this.deactivate() : this.activate();\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if the overview is currently active.\n\t *\n\t * @return {Boolean} true if the overview is active,\n\t * false otherwise\n\t */\n\tisActive() {\n\n\t\treturn this.active;\n\n\t}\n\n\t/**\n\t * Invoked when a slide is and we're in the overview.\n\t *\n\t * @param {object} event\n\t */\n\tonSlideClicked( event ) {\n\n\t\tif( this.isActive() ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tlet element = event.target;\n\n\t\t\twhile( element && !element.nodeName.match( /section/gi ) ) {\n\t\t\t\telement = element.parentNode;\n\t\t\t}\n\n\t\t\tif( element && !element.classList.contains( 'disabled' ) ) {\n\n\t\t\t\tthis.deactivate();\n\n\t\t\t\tif( element.nodeName.match( /section/gi ) ) {\n\t\t\t\t\tlet h = parseInt( element.getAttribute( 'data-index-h' ), 10 ),\n\t\t\t\t\t\tv = parseInt( element.getAttribute( 'data-index-v' ), 10 );\n\n\t\t\t\t\tthis.Reveal.slide( h, v );\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t}\n\n}","import { enterFullscreen } from '../utils/util.js'\n\n/**\n * Handles all reveal.js keyboard interactions.\n */\nexport default class Keyboard {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\t// A key:value map of keyboard keys and descriptions of\n\t\t// the actions they trigger\n\t\tthis.shortcuts = {};\n\n\t\t// Holds custom key code mappings\n\t\tthis.bindings = {};\n\n\t\tthis.onDocumentKeyDown = this.onDocumentKeyDown.bind( this );\n\t\tthis.onDocumentKeyPress = this.onDocumentKeyPress.bind( this );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.navigationMode === 'linear' ) {\n\t\t\tthis.shortcuts['→ , ↓ , SPACE , N , L , J'] = 'Next slide';\n\t\t\tthis.shortcuts['← , ↑ , P , H , K'] = 'Previous slide';\n\t\t}\n\t\telse {\n\t\t\tthis.shortcuts['N , SPACE'] = 'Next slide';\n\t\t\tthis.shortcuts['P , Shift SPACE'] = 'Previous slide';\n\t\t\tthis.shortcuts['← , H'] = 'Navigate left';\n\t\t\tthis.shortcuts['→ , L'] = 'Navigate right';\n\t\t\tthis.shortcuts['↑ , K'] = 'Navigate up';\n\t\t\tthis.shortcuts['↓ , J'] = 'Navigate down';\n\t\t}\n\n\t\tthis.shortcuts['Alt + ←/↑/→/↓'] = 'Navigate without fragments';\n\t\tthis.shortcuts['Shift + ←/↑/→/↓'] = 'Jump to first/last slide';\n\t\tthis.shortcuts['B , .'] = 'Pause';\n\t\tthis.shortcuts['F'] = 'Fullscreen';\n\t\tthis.shortcuts['ESC, O'] = 'Slide overview';\n\n\t}\n\n\t/**\n\t * Starts listening for keyboard events.\n\t */\n\tbind() {\n\n\t\tdocument.addEventListener( 'keydown', this.onDocumentKeyDown, false );\n\t\tdocument.addEventListener( 'keypress', this.onDocumentKeyPress, false );\n\n\t}\n\n\t/**\n\t * Stops listening for keyboard events.\n\t */\n\tunbind() {\n\n\t\tdocument.removeEventListener( 'keydown', this.onDocumentKeyDown, false );\n\t\tdocument.removeEventListener( 'keypress', this.onDocumentKeyPress, false );\n\n\t}\n\n\t/**\n\t * Add a custom key binding with optional description to\n\t * be added to the help screen.\n\t */\n\taddKeyBinding( binding, callback ) {\n\n\t\tif( typeof binding === 'object' && binding.keyCode ) {\n\t\t\tthis.bindings[binding.keyCode] = {\n\t\t\t\tcallback: callback,\n\t\t\t\tkey: binding.key,\n\t\t\t\tdescription: binding.description\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tthis.bindings[binding] = {\n\t\t\t\tcallback: callback,\n\t\t\t\tkey: null,\n\t\t\t\tdescription: null\n\t\t\t};\n\t\t}\n\n\t}\n\n\t/**\n\t * Removes the specified custom key binding.\n\t */\n\tremoveKeyBinding( keyCode ) {\n\n\t\tdelete this.bindings[keyCode];\n\n\t}\n\n\t/**\n\t * Programmatically triggers a keyboard event\n\t *\n\t * @param {int} keyCode\n\t */\n\ttriggerKey( keyCode ) {\n\n\t\tthis.onDocumentKeyDown( { keyCode } );\n\n\t}\n\n\t/**\n\t * Registers a new shortcut to include in the help overlay\n\t *\n\t * @param {String} key\n\t * @param {String} value\n\t */\n\tregisterKeyboardShortcut( key, value ) {\n\n\t\tthis.shortcuts[key] = value;\n\n\t}\n\n\tgetShortcuts() {\n\n\t\treturn this.shortcuts;\n\n\t}\n\n\tgetBindings() {\n\n\t\treturn this.bindings;\n\n\t}\n\n\t/**\n\t * Handler for the document level 'keypress' event.\n\t *\n\t * @param {object} event\n\t */\n\tonDocumentKeyPress( event ) {\n\n\t\t// Check if the pressed key is question mark\n\t\tif( event.shiftKey && event.charCode === 63 ) {\n\t\t\tthis.Reveal.toggleHelp();\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the document level 'keydown' event.\n\t *\n\t * @param {object} event\n\t */\n\tonDocumentKeyDown( event ) {\n\n\t\tlet config = this.Reveal.getConfig();\n\n\t\t// If there's a condition specified and it returns false,\n\t\t// ignore this event\n\t\tif( typeof config.keyboardCondition === 'function' && config.keyboardCondition(event) === false ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// If keyboardCondition is set, only capture keyboard events\n\t\t// for embedded decks when they are focused\n\t\tif( config.keyboardCondition === 'focused' && !this.Reveal.isFocused() ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Shorthand\n\t\tlet keyCode = event.keyCode;\n\n\t\t// Remember if auto-sliding was paused so we can toggle it\n\t\tlet autoSlideWasPaused = !this.Reveal.isAutoSliding();\n\n\t\tthis.Reveal.onUserInput( event );\n\n\t\t// Is there a focused element that could be using the keyboard?\n\t\tlet activeElementIsCE = document.activeElement && document.activeElement.isContentEditable === true;\n\t\tlet activeElementIsInput = document.activeElement && document.activeElement.tagName && /input|textarea/i.test( document.activeElement.tagName );\n\t\tlet activeElementIsNotes = document.activeElement && document.activeElement.className && /speaker-notes/i.test( document.activeElement.className);\n\n\t\t// Whitelist certain modifiers for slide navigation shortcuts\n\t\tlet isNavigationKey = [32, 37, 38, 39, 40, 78, 80].indexOf( event.keyCode ) !== -1;\n\n\t\t// Prevent all other events when a modifier is pressed\n\t\tlet unusedModifier = \t!( isNavigationKey && event.shiftKey || event.altKey ) &&\n\t\t\t\t\t\t\t\t( event.shiftKey || event.altKey || event.ctrlKey || event.metaKey );\n\n\t\t// Disregard the event if there's a focused element or a\n\t\t// keyboard modifier key is present\n\t\tif( activeElementIsCE || activeElementIsInput || activeElementIsNotes || unusedModifier ) return;\n\n\t\t// While paused only allow resume keyboard events; 'b', 'v', '.'\n\t\tlet resumeKeyCodes = [66,86,190,191];\n\t\tlet key;\n\n\t\t// Custom key bindings for togglePause should be able to resume\n\t\tif( typeof config.keyboard === 'object' ) {\n\t\t\tfor( key in config.keyboard ) {\n\t\t\t\tif( config.keyboard[key] === 'togglePause' ) {\n\t\t\t\t\tresumeKeyCodes.push( parseInt( key, 10 ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif( this.Reveal.isPaused() && resumeKeyCodes.indexOf( keyCode ) === -1 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Use linear navigation if we're configured to OR if\n\t\t// the presentation is one-dimensional\n\t\tlet useLinearMode = config.navigationMode === 'linear' || !this.Reveal.hasHorizontalSlides() || !this.Reveal.hasVerticalSlides();\n\n\t\tlet triggered = false;\n\n\t\t// 1. User defined key bindings\n\t\tif( typeof config.keyboard === 'object' ) {\n\n\t\t\tfor( key in config.keyboard ) {\n\n\t\t\t\t// Check if this binding matches the pressed key\n\t\t\t\tif( parseInt( key, 10 ) === keyCode ) {\n\n\t\t\t\t\tlet value = config.keyboard[ key ];\n\n\t\t\t\t\t// Callback function\n\t\t\t\t\tif( typeof value === 'function' ) {\n\t\t\t\t\t\tvalue.apply( null, [ event ] );\n\t\t\t\t\t}\n\t\t\t\t\t// String shortcuts to reveal.js API\n\t\t\t\t\telse if( typeof value === 'string' && typeof this.Reveal[ value ] === 'function' ) {\n\t\t\t\t\t\tthis.Reveal[ value ].call();\n\t\t\t\t\t}\n\n\t\t\t\t\ttriggered = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// 2. Registered custom key bindings\n\t\tif( triggered === false ) {\n\n\t\t\tfor( key in this.bindings ) {\n\n\t\t\t\t// Check if this binding matches the pressed key\n\t\t\t\tif( parseInt( key, 10 ) === keyCode ) {\n\n\t\t\t\t\tlet action = this.bindings[ key ].callback;\n\n\t\t\t\t\t// Callback function\n\t\t\t\t\tif( typeof action === 'function' ) {\n\t\t\t\t\t\taction.apply( null, [ event ] );\n\t\t\t\t\t}\n\t\t\t\t\t// String shortcuts to reveal.js API\n\t\t\t\t\telse if( typeof action === 'string' && typeof this.Reveal[ action ] === 'function' ) {\n\t\t\t\t\t\tthis.Reveal[ action ].call();\n\t\t\t\t\t}\n\n\t\t\t\t\ttriggered = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 3. System defined key bindings\n\t\tif( triggered === false ) {\n\n\t\t\t// Assume true and try to prove false\n\t\t\ttriggered = true;\n\n\t\t\t// P, PAGE UP\n\t\t\tif( keyCode === 80 || keyCode === 33 ) {\n\t\t\t\tthis.Reveal.prev({skipFragments: event.altKey});\n\t\t\t}\n\t\t\t// N, PAGE DOWN\n\t\t\telse if( keyCode === 78 || keyCode === 34 ) {\n\t\t\t\tthis.Reveal.next({skipFragments: event.altKey});\n\t\t\t}\n\t\t\t// H, LEFT\n\t\t\telse if( keyCode === 72 || keyCode === 37 ) {\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.slide( 0 );\n\t\t\t\t}\n\t\t\t\telse if( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.prev({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.left({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// L, RIGHT\n\t\t\telse if( keyCode === 76 || keyCode === 39 ) {\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.slide( this.Reveal.getHorizontalSlides().length - 1 );\n\t\t\t\t}\n\t\t\t\telse if( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.next({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.right({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// K, UP\n\t\t\telse if( keyCode === 75 || keyCode === 38 ) {\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.slide( undefined, 0 );\n\t\t\t\t}\n\t\t\t\telse if( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.prev({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.up({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// J, DOWN\n\t\t\telse if( keyCode === 74 || keyCode === 40 ) {\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.slide( undefined, Number.MAX_VALUE );\n\t\t\t\t}\n\t\t\t\telse if( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.next({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.down({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// HOME\n\t\t\telse if( keyCode === 36 ) {\n\t\t\t\tthis.Reveal.slide( 0 );\n\t\t\t}\n\t\t\t// END\n\t\t\telse if( keyCode === 35 ) {\n\t\t\t\tthis.Reveal.slide( this.Reveal.getHorizontalSlides().length - 1 );\n\t\t\t}\n\t\t\t// SPACE\n\t\t\telse if( keyCode === 32 ) {\n\t\t\t\tif( this.Reveal.overview.isActive() ) {\n\t\t\t\t\tthis.Reveal.overview.deactivate();\n\t\t\t\t}\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.prev({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.next({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// TWO-SPOT, SEMICOLON, B, V, PERIOD, LOGITECH PRESENTER TOOLS \"BLACK SCREEN\" BUTTON\n\t\t\telse if( keyCode === 58 || keyCode === 59 || keyCode === 66 || keyCode === 86 || keyCode === 190 || keyCode === 191 ) {\n\t\t\t\tthis.Reveal.togglePause();\n\t\t\t}\n\t\t\t// F\n\t\t\telse if( keyCode === 70 ) {\n\t\t\t\tenterFullscreen( config.embedded ? this.Reveal.getViewportElement() : document.documentElement );\n\t\t\t}\n\t\t\t// A\n\t\t\telse if( keyCode === 65 ) {\n\t\t\t\tif ( config.autoSlideStoppable ) {\n\t\t\t\t\tthis.Reveal.toggleAutoSlide( autoSlideWasPaused );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttriggered = false;\n\t\t\t}\n\n\t\t}\n\n\t\t// If the input resulted in a triggered action we should prevent\n\t\t// the browsers default behavior\n\t\tif( triggered ) {\n\t\t\tevent.preventDefault && event.preventDefault();\n\t\t}\n\t\t// ESC or O key\n\t\telse if( keyCode === 27 || keyCode === 79 ) {\n\t\t\tif( this.Reveal.closeOverlay() === false ) {\n\t\t\t\tthis.Reveal.overview.toggle();\n\t\t\t}\n\n\t\t\tevent.preventDefault && event.preventDefault();\n\t\t}\n\n\t\t// If auto-sliding is enabled we need to cue up\n\t\t// another timeout\n\t\tthis.Reveal.cueAutoSlide();\n\n\t}\n\n}","/**\n * Reads and writes the URL based on reveal.js' current state.\n */\nexport default class Location {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\t// Delays updates to the URL due to a Chrome thumbnailer bug\n\t\tthis.writeURLTimeout = 0;\n\n\t\tthis.onWindowHashChange = this.onWindowHashChange.bind( this );\n\n\t}\n\n\tbind() {\n\n\t\twindow.addEventListener( 'hashchange', this.onWindowHashChange, false );\n\n\t}\n\n\tunbind() {\n\n\t\twindow.removeEventListener( 'hashchange', this.onWindowHashChange, false );\n\n\t}\n\n\t/**\n\t * Returns the slide indices for the given hash link.\n\t *\n\t * @param {string} [hash] the hash string that we want to\n\t * find the indices for\n\t *\n\t * @returns slide indices or null\n\t */\n\tgetIndicesFromHash( hash=window.location.hash ) {\n\n\t\t// Attempt to parse the hash as either an index or name\n\t\tlet name = hash.replace( /^#\\/?/, '' );\n\t\tlet bits = name.split( '/' );\n\n\t\t// If the first bit is not fully numeric and there is a name we\n\t\t// can assume that this is a named link\n\t\tif( !/^[0-9]*$/.test( bits[0] ) && name.length ) {\n\t\t\tlet element;\n\n\t\t\tlet f;\n\n\t\t\t// Parse named links with fragments (#/named-link/2)\n\t\t\tif( /\\/[-\\d]+$/g.test( name ) ) {\n\t\t\t\tf = parseInt( name.split( '/' ).pop(), 10 );\n\t\t\t\tf = isNaN(f) ? undefined : f;\n\t\t\t\tname = name.split( '/' ).shift();\n\t\t\t}\n\n\t\t\t// Ensure the named link is a valid HTML ID attribute\n\t\t\ttry {\n\t\t\t\telement = document.getElementById( decodeURIComponent( name ) );\n\t\t\t}\n\t\t\tcatch ( error ) { }\n\n\t\t\tif( element ) {\n\t\t\t\treturn { ...this.Reveal.getIndices( element ), f };\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconst config = this.Reveal.getConfig();\n\t\t\tlet hashIndexBase = config.hashOneBasedIndex ? 1 : 0;\n\n\t\t\t// Read the index components of the hash\n\t\t\tlet h = ( parseInt( bits[0], 10 ) - hashIndexBase ) || 0,\n\t\t\t\tv = ( parseInt( bits[1], 10 ) - hashIndexBase ) || 0,\n\t\t\t\tf;\n\n\t\t\tif( config.fragmentInURL ) {\n\t\t\t\tf = parseInt( bits[2], 10 );\n\t\t\t\tif( isNaN( f ) ) {\n\t\t\t\t\tf = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { h, v, f };\n\t\t}\n\n\t\t// The hash couldn't be parsed or no matching named link was found\n\t\treturn null\n\n\t}\n\n\t/**\n\t * Reads the current URL (hash) and navigates accordingly.\n\t */\n\treadURL() {\n\n\t\tconst currentIndices = this.Reveal.getIndices();\n\t\tconst newIndices = this.getIndicesFromHash();\n\n\t\tif( newIndices ) {\n\t\t\tif( ( newIndices.h !== currentIndices.h || newIndices.v !== currentIndices.v || newIndices.f !== undefined ) ) {\n\t\t\t\t\tthis.Reveal.slide( newIndices.h, newIndices.v, newIndices.f );\n\t\t\t}\n\t\t}\n\t\t// If no new indices are available, we're trying to navigate to\n\t\t// a slide hash that does not exist\n\t\telse {\n\t\t\tthis.Reveal.slide( currentIndices.h || 0, currentIndices.v || 0 );\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the page URL (hash) to reflect the current\n\t * state.\n\t *\n\t * @param {number} delay The time in ms to wait before\n\t * writing the hash\n\t */\n\twriteURL( delay ) {\n\n\t\tlet config = this.Reveal.getConfig();\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\n\t\t// Make sure there's never more than one timeout running\n\t\tclearTimeout( this.writeURLTimeout );\n\n\t\t// If a delay is specified, timeout this call\n\t\tif( typeof delay === 'number' ) {\n\t\t\tthis.writeURLTimeout = setTimeout( this.writeURL, delay );\n\t\t}\n\t\telse if( currentSlide ) {\n\n\t\t\tlet hash = this.getHash();\n\n\t\t\t// If we're configured to push to history OR the history\n\t\t\t// API is not avaialble.\n\t\t\tif( config.history ) {\n\t\t\t\twindow.location.hash = hash;\n\t\t\t}\n\t\t\t// If we're configured to reflect the current slide in the\n\t\t\t// URL without pushing to history.\n\t\t\telse if( config.hash ) {\n\t\t\t\t// If the hash is empty, don't add it to the URL\n\t\t\t\tif( hash === '/' ) {\n\t\t\t\t\twindow.history.replaceState( null, null, window.location.pathname + window.location.search );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\twindow.history.replaceState( null, null, '#' + hash );\n\t\t\t\t}\n\t\t\t}\n\t\t\t// UPDATE: The below nuking of all hash changes breaks\n\t\t\t// anchors on pages where reveal.js is running. Removed\n\t\t\t// in 4.0. Why was it here in the first place? ¯\\_(ツ)_/¯\n\t\t\t//\n\t\t\t// If history and hash are both disabled, a hash may still\n\t\t\t// be added to the URL by clicking on a href with a hash\n\t\t\t// target. Counter this by always removing the hash.\n\t\t\t// else {\n\t\t\t// \twindow.history.replaceState( null, null, window.location.pathname + window.location.search );\n\t\t\t// }\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Return a hash URL that will resolve to the given slide location.\n\t *\n\t * @param {HTMLElement} [slide=currentSlide] The slide to link to\n\t */\n\tgetHash( slide ) {\n\n\t\tlet url = '/';\n\n\t\t// Attempt to create a named link based on the slide's ID\n\t\tlet s = slide || this.Reveal.getCurrentSlide();\n\t\tlet id = s ? s.getAttribute( 'id' ) : null;\n\t\tif( id ) {\n\t\t\tid = encodeURIComponent( id );\n\t\t}\n\n\t\tlet index = this.Reveal.getIndices( slide );\n\t\tif( !this.Reveal.getConfig().fragmentInURL ) {\n\t\t\tindex.f = undefined;\n\t\t}\n\n\t\t// If the current slide has an ID, use that as a named link,\n\t\t// but we don't support named links with a fragment index\n\t\tif( typeof id === 'string' && id.length ) {\n\t\t\turl = '/' + id;\n\n\t\t\t// If there is also a fragment, append that at the end\n\t\t\t// of the named link, like: #/named-link/2\n\t\t\tif( index.f >= 0 ) url += '/' + index.f;\n\t\t}\n\t\t// Otherwise use the /h/v index\n\t\telse {\n\t\t\tlet hashIndexBase = this.Reveal.getConfig().hashOneBasedIndex ? 1 : 0;\n\t\t\tif( index.h > 0 || index.v > 0 || index.f >= 0 ) url += index.h + hashIndexBase;\n\t\t\tif( index.v > 0 || index.f >= 0 ) url += '/' + (index.v + hashIndexBase );\n\t\t\tif( index.f >= 0 ) url += '/' + index.f;\n\t\t}\n\n\t\treturn url;\n\n\t}\n\n\t/**\n\t * Handler for the window level 'hashchange' event.\n\t *\n\t * @param {object} [event]\n\t */\n\tonWindowHashChange( event ) {\n\n\t\tthis.readURL();\n\n\t}\n\n}","import { queryAll } from '../utils/util.js'\nimport { isAndroid } from '../utils/device.js'\n\n/**\n * Manages our presentation controls. This includes both\n * the built-in control arrows as well as event monitoring\n * of any elements within the presentation with either of the\n * following helper classes:\n * - .navigate-up\n * - .navigate-right\n * - .navigate-down\n * - .navigate-left\n * - .navigate-next\n * - .navigate-prev\n */\nexport default class Controls {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.onNavigateLeftClicked = this.onNavigateLeftClicked.bind( this );\n\t\tthis.onNavigateRightClicked = this.onNavigateRightClicked.bind( this );\n\t\tthis.onNavigateUpClicked = this.onNavigateUpClicked.bind( this );\n\t\tthis.onNavigateDownClicked = this.onNavigateDownClicked.bind( this );\n\t\tthis.onNavigatePrevClicked = this.onNavigatePrevClicked.bind( this );\n\t\tthis.onNavigateNextClicked = this.onNavigateNextClicked.bind( this );\n\n\t}\n\n\trender() {\n\n\t\tconst rtl = this.Reveal.getConfig().rtl;\n\t\tconst revealElement = this.Reveal.getRevealElement();\n\n\t\tthis.element = document.createElement( 'aside' );\n\t\tthis.element.className = 'controls';\n\t\tthis.element.innerHTML =\n\t\t\t`<button class=\"navigate-left\" aria-label=\"${ rtl ? 'next slide' : 'previous slide' }\"><div class=\"controls-arrow\"></div></button>\n\t\t\t<button class=\"navigate-right\" aria-label=\"${ rtl ? 'previous slide' : 'next slide' }\"><div class=\"controls-arrow\"></div></button>\n\t\t\t<button class=\"navigate-up\" aria-label=\"above slide\"><div class=\"controls-arrow\"></div></button>\n\t\t\t<button class=\"navigate-down\" aria-label=\"below slide\"><div class=\"controls-arrow\"></div></button>`;\n\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t\t// There can be multiple instances of controls throughout the page\n\t\tthis.controlsLeft = queryAll( revealElement, '.navigate-left' );\n\t\tthis.controlsRight = queryAll( revealElement, '.navigate-right' );\n\t\tthis.controlsUp = queryAll( revealElement, '.navigate-up' );\n\t\tthis.controlsDown = queryAll( revealElement, '.navigate-down' );\n\t\tthis.controlsPrev = queryAll( revealElement, '.navigate-prev' );\n\t\tthis.controlsNext = queryAll( revealElement, '.navigate-next' );\n\n\t\t// The left, right and down arrows in the standard reveal.js controls\n\t\tthis.controlsRightArrow = this.element.querySelector( '.navigate-right' );\n\t\tthis.controlsLeftArrow = this.element.querySelector( '.navigate-left' );\n\t\tthis.controlsDownArrow = this.element.querySelector( '.navigate-down' );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tthis.element.style.display = config.controls ? 'block' : 'none';\n\n\t\tthis.element.setAttribute( 'data-controls-layout', config.controlsLayout );\n\t\tthis.element.setAttribute( 'data-controls-back-arrows', config.controlsBackArrows );\n\n\t}\n\n\tbind() {\n\n\t\t// Listen to both touch and click events, in case the device\n\t\t// supports both\n\t\tlet pointerEvents = [ 'touchstart', 'click' ];\n\n\t\t// Only support touch for Android, fixes double navigations in\n\t\t// stock browser\n\t\tif( isAndroid ) {\n\t\t\tpointerEvents = [ 'touchstart' ];\n\t\t}\n\n\t\tpointerEvents.forEach( eventName => {\n\t\t\tthis.controlsLeft.forEach( el => el.addEventListener( eventName, this.onNavigateLeftClicked, false ) );\n\t\t\tthis.controlsRight.forEach( el => el.addEventListener( eventName, this.onNavigateRightClicked, false ) );\n\t\t\tthis.controlsUp.forEach( el => el.addEventListener( eventName, this.onNavigateUpClicked, false ) );\n\t\t\tthis.controlsDown.forEach( el => el.addEventListener( eventName, this.onNavigateDownClicked, false ) );\n\t\t\tthis.controlsPrev.forEach( el => el.addEventListener( eventName, this.onNavigatePrevClicked, false ) );\n\t\t\tthis.controlsNext.forEach( el => el.addEventListener( eventName, this.onNavigateNextClicked, false ) );\n\t\t} );\n\n\t}\n\n\tunbind() {\n\n\t\t[ 'touchstart', 'click' ].forEach( eventName => {\n\t\t\tthis.controlsLeft.forEach( el => el.removeEventListener( eventName, this.onNavigateLeftClicked, false ) );\n\t\t\tthis.controlsRight.forEach( el => el.removeEventListener( eventName, this.onNavigateRightClicked, false ) );\n\t\t\tthis.controlsUp.forEach( el => el.removeEventListener( eventName, this.onNavigateUpClicked, false ) );\n\t\t\tthis.controlsDown.forEach( el => el.removeEventListener( eventName, this.onNavigateDownClicked, false ) );\n\t\t\tthis.controlsPrev.forEach( el => el.removeEventListener( eventName, this.onNavigatePrevClicked, false ) );\n\t\t\tthis.controlsNext.forEach( el => el.removeEventListener( eventName, this.onNavigateNextClicked, false ) );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Updates the state of all control/navigation arrows.\n\t */\n\tupdate() {\n\n\t\tlet routes = this.Reveal.availableRoutes();\n\n\t\t// Remove the 'enabled' class from all directions\n\t\t[...this.controlsLeft, ...this.controlsRight, ...this.controlsUp, ...this.controlsDown, ...this.controlsPrev, ...this.controlsNext].forEach( node => {\n\t\t\tnode.classList.remove( 'enabled', 'fragmented' );\n\n\t\t\t// Set 'disabled' attribute on all directions\n\t\t\tnode.setAttribute( 'disabled', 'disabled' );\n\t\t} );\n\n\t\t// Add the 'enabled' class to the available routes; remove 'disabled' attribute to enable buttons\n\t\tif( routes.left ) this.controlsLeft.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\tif( routes.right ) this.controlsRight.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\tif( routes.up ) this.controlsUp.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\tif( routes.down ) this.controlsDown.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\n\t\t// Prev/next buttons\n\t\tif( routes.left || routes.up ) this.controlsPrev.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\tif( routes.right || routes.down ) this.controlsNext.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\n\t\t// Highlight fragment directions\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tif( currentSlide ) {\n\n\t\t\tlet fragmentsRoutes = this.Reveal.fragments.availableRoutes();\n\n\t\t\t// Always apply fragment decorator to prev/next buttons\n\t\t\tif( fragmentsRoutes.prev ) this.controlsPrev.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\tif( fragmentsRoutes.next ) this.controlsNext.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\n\t\t\t// Apply fragment decorators to directional buttons based on\n\t\t\t// what slide axis they are in\n\t\t\tif( this.Reveal.isVerticalSlide( currentSlide ) ) {\n\t\t\t\tif( fragmentsRoutes.prev ) this.controlsUp.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\t\tif( fragmentsRoutes.next ) this.controlsDown.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif( fragmentsRoutes.prev ) this.controlsLeft.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\t\tif( fragmentsRoutes.next ) this.controlsRight.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\t}\n\n\t\t}\n\n\t\tif( this.Reveal.getConfig().controlsTutorial ) {\n\n\t\t\tlet indices = this.Reveal.getIndices();\n\n\t\t\t// Highlight control arrows with an animation to ensure\n\t\t\t// that the viewer knows how to navigate\n\t\t\tif( !this.Reveal.hasNavigatedVertically() && routes.down ) {\n\t\t\t\tthis.controlsDownArrow.classList.add( 'highlight' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.controlsDownArrow.classList.remove( 'highlight' );\n\n\t\t\t\tif( this.Reveal.getConfig().rtl ) {\n\n\t\t\t\t\tif( !this.Reveal.hasNavigatedHorizontally() && routes.left && indices.v === 0 ) {\n\t\t\t\t\t\tthis.controlsLeftArrow.classList.add( 'highlight' );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.controlsLeftArrow.classList.remove( 'highlight' );\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif( !this.Reveal.hasNavigatedHorizontally() && routes.right && indices.v === 0 ) {\n\t\t\t\t\t\tthis.controlsRightArrow.classList.add( 'highlight' );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.controlsRightArrow.classList.remove( 'highlight' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Event handlers for navigation control buttons.\n\t */\n\tonNavigateLeftClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tif( this.Reveal.getConfig().navigationMode === 'linear' ) {\n\t\t\tthis.Reveal.prev();\n\t\t}\n\t\telse {\n\t\t\tthis.Reveal.left();\n\t\t}\n\n\t}\n\n\tonNavigateRightClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tif( this.Reveal.getConfig().navigationMode === 'linear' ) {\n\t\t\tthis.Reveal.next();\n\t\t}\n\t\telse {\n\t\t\tthis.Reveal.right();\n\t\t}\n\n\t}\n\n\tonNavigateUpClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tthis.Reveal.up();\n\n\t}\n\n\tonNavigateDownClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tthis.Reveal.down();\n\n\t}\n\n\tonNavigatePrevClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tthis.Reveal.prev();\n\n\t}\n\n\tonNavigateNextClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tthis.Reveal.next();\n\n\t}\n\n\n}","/**\n * Creates a visual progress bar for the presentation.\n */\nexport default class Progress {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.onProgressClicked = this.onProgressClicked.bind( this );\n\n\t}\n\n\trender() {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.className = 'progress';\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t\tthis.bar = document.createElement( 'span' );\n\t\tthis.element.appendChild( this.bar );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tthis.element.style.display = config.progress ? 'block' : 'none';\n\n\t}\n\n\tbind() {\n\n\t\tif( this.Reveal.getConfig().progress && this.element ) {\n\t\t\tthis.element.addEventListener( 'click', this.onProgressClicked, false );\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tif ( this.Reveal.getConfig().progress && this.element ) {\n\t\t\tthis.element.removeEventListener( 'click', this.onProgressClicked, false );\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the progress bar to reflect the current slide.\n\t */\n\tupdate() {\n\n\t\t// Update progress if enabled\n\t\tif( this.Reveal.getConfig().progress && this.bar ) {\n\n\t\t\tlet scale = this.Reveal.getProgress();\n\n\t\t\t// Don't fill the progress bar if there's only one slide\n\t\t\tif( this.Reveal.getTotalSlides() < 2 ) {\n\t\t\t\tscale = 0;\n\t\t\t}\n\n\t\t\tthis.bar.style.transform = 'scaleX('+ scale +')';\n\n\t\t}\n\n\t}\n\n\tgetMaxWidth() {\n\n\t\treturn this.Reveal.getRevealElement().offsetWidth;\n\n\t}\n\n\t/**\n\t * Clicking on the progress bar results in a navigation to the\n\t * closest approximate horizontal slide using this equation:\n\t *\n\t * ( clickX / presentationWidth ) * numberOfSlides\n\t *\n\t * @param {object} event\n\t */\n\tonProgressClicked( event ) {\n\n\t\tthis.Reveal.onUserInput( event );\n\n\t\tevent.preventDefault();\n\n\t\tlet slides = this.Reveal.getSlides();\n\t\tlet slidesTotal = slides.length;\n\t\tlet slideIndex = Math.floor( ( event.clientX / this.getMaxWidth() ) * slidesTotal );\n\n\t\tif( this.Reveal.getConfig().rtl ) {\n\t\t\tslideIndex = slidesTotal - slideIndex;\n\t\t}\n\n\t\tlet targetIndices = this.Reveal.getIndices(slides[slideIndex]);\n\t\tthis.Reveal.slide( targetIndices.h, targetIndices.v );\n\n\t}\n\n\n}","/**\n * Handles hiding of the pointer/cursor when inactive.\n */\nexport default class Pointer {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\t// Throttles mouse wheel navigation\n\t\tthis.lastMouseWheelStep = 0;\n\n\t\t// Is the mouse pointer currently hidden from view\n\t\tthis.cursorHidden = false;\n\n\t\t// Timeout used to determine when the cursor is inactive\n\t\tthis.cursorInactiveTimeout = 0;\n\n\t\tthis.onDocumentCursorActive = this.onDocumentCursorActive.bind( this );\n\t\tthis.onDocumentMouseScroll = this.onDocumentMouseScroll.bind( this );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.mouseWheel ) {\n\t\t\tdocument.addEventListener( 'DOMMouseScroll', this.onDocumentMouseScroll, false ); // FF\n\t\t\tdocument.addEventListener( 'mousewheel', this.onDocumentMouseScroll, false );\n\t\t}\n\t\telse {\n\t\t\tdocument.removeEventListener( 'DOMMouseScroll', this.onDocumentMouseScroll, false ); // FF\n\t\t\tdocument.removeEventListener( 'mousewheel', this.onDocumentMouseScroll, false );\n\t\t}\n\n\t\t// Auto-hide the mouse pointer when its inactive\n\t\tif( config.hideInactiveCursor ) {\n\t\t\tdocument.addEventListener( 'mousemove', this.onDocumentCursorActive, false );\n\t\t\tdocument.addEventListener( 'mousedown', this.onDocumentCursorActive, false );\n\t\t}\n\t\telse {\n\t\t\tthis.showCursor();\n\n\t\t\tdocument.removeEventListener( 'mousemove', this.onDocumentCursorActive, false );\n\t\t\tdocument.removeEventListener( 'mousedown', this.onDocumentCursorActive, false );\n\t\t}\n\n\t}\n\n\t/**\n\t * Shows the mouse pointer after it has been hidden with\n\t * #hideCursor.\n\t */\n\tshowCursor() {\n\n\t\tif( this.cursorHidden ) {\n\t\t\tthis.cursorHidden = false;\n\t\t\tthis.Reveal.getRevealElement().style.cursor = '';\n\t\t}\n\n\t}\n\n\t/**\n\t * Hides the mouse pointer when it's on top of the .reveal\n\t * container.\n\t */\n\thideCursor() {\n\n\t\tif( this.cursorHidden === false ) {\n\t\t\tthis.cursorHidden = true;\n\t\t\tthis.Reveal.getRevealElement().style.cursor = 'none';\n\t\t}\n\n\t}\n\n\t/**\n\t * Called whenever there is mouse input at the document level\n\t * to determine if the cursor is active or not.\n\t *\n\t * @param {object} event\n\t */\n\tonDocumentCursorActive( event ) {\n\n\t\tthis.showCursor();\n\n\t\tclearTimeout( this.cursorInactiveTimeout );\n\n\t\tthis.cursorInactiveTimeout = setTimeout( this.hideCursor.bind( this ), this.Reveal.getConfig().hideCursorTime );\n\n\t}\n\n\t/**\n\t * Handles mouse wheel scrolling, throttled to avoid skipping\n\t * multiple slides.\n\t *\n\t * @param {object} event\n\t */\n\tonDocumentMouseScroll( event ) {\n\n\t\tif( Date.now() - this.lastMouseWheelStep > 1000 ) {\n\n\t\t\tthis.lastMouseWheelStep = Date.now();\n\n\t\t\tlet delta = event.detail || -event.wheelDelta;\n\t\t\tif( delta > 0 ) {\n\t\t\t\tthis.Reveal.next();\n\t\t\t}\n\t\t\telse if( delta < 0 ) {\n\t\t\t\tthis.Reveal.prev();\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}","var DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || propertyIsEnumerable(O, key)) {\n push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.es/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.es/ecma262/#sec-object.values\n values: createMethod(false)\n};\n","var $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n values: function values(O) {\n return $values(O);\n }\n});\n","/**\n * Loads a JavaScript file from the given URL and executes it.\n *\n * @param {string} url Address of the .js file to load\n * @param {function} callback Method to invoke when the script\n * has loaded and executed\n */\nexport const loadScript = ( url, callback ) => {\n\n\tconst script = document.createElement( 'script' );\n\tscript.type = 'text/javascript';\n\tscript.async = false;\n\tscript.defer = false;\n\tscript.src = url;\n\n\tif( typeof callback === 'function' ) {\n\n\t\t// Success callback\n\t\tscript.onload = script.onreadystatechange = event => {\n\t\t\tif( event.type === 'load' || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t// Kill event listeners\n\t\t\t\tscript.onload = script.onreadystatechange = script.onerror = null;\n\n\t\t\t\tcallback();\n\n\t\t\t}\n\t\t};\n\n\t\t// Error callback\n\t\tscript.onerror = err => {\n\n\t\t\t// Kill event listeners\n\t\t\tscript.onload = script.onreadystatechange = script.onerror = null;\n\n\t\t\tcallback( new Error( 'Failed loading script: ' + script.src + '\\n' + err ) );\n\n\t\t};\n\n\t}\n\n\t// Append the script at the end of <head>\n\tconst head = document.querySelector( 'head' );\n\thead.insertBefore( script, head.lastChild );\n\n}","import { loadScript } from '../utils/loader.js'\n\n/**\n * Manages loading and registering of reveal.js plugins.\n */\nexport default class Plugins {\n\n\tconstructor( reveal ) {\n\n\t\tthis.Reveal = reveal;\n\n\t\t// Flags our current state (idle -> loading -> loaded)\n\t\tthis.state = 'idle';\n\n\t\t// An id:instance map of currently registed plugins\n\t\tthis.registeredPlugins = {};\n\n\t\tthis.asyncDependencies = [];\n\n\t}\n\n\t/**\n\t * Loads reveal.js dependencies, registers and\n\t * initializes plugins.\n\t *\n\t * Plugins are direct references to a reveal.js plugin\n\t * object that we register and initialize after any\n\t * synchronous dependencies have loaded.\n\t *\n\t * Dependencies are defined via the 'dependencies' config\n\t * option and will be loaded prior to starting reveal.js.\n\t * Some dependencies may have an 'async' flag, if so they\n\t * will load after reveal.js has been started up.\n\t */\n\tload( plugins, dependencies ) {\n\n\t\tthis.state = 'loading';\n\n\t\tplugins.forEach( this.registerPlugin.bind( this ) );\n\n\t\treturn new Promise( resolve => {\n\n\t\t\tlet scripts = [],\n\t\t\t\tscriptsToLoad = 0;\n\n\t\t\tdependencies.forEach( s => {\n\t\t\t\t// Load if there's no condition or the condition is truthy\n\t\t\t\tif( !s.condition || s.condition() ) {\n\t\t\t\t\tif( s.async ) {\n\t\t\t\t\t\tthis.asyncDependencies.push( s );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tscripts.push( s );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tif( scripts.length ) {\n\t\t\t\tscriptsToLoad = scripts.length;\n\n\t\t\t\tconst scriptLoadedCallback = (s) => {\n\t\t\t\t\tif( s && typeof s.callback === 'function' ) s.callback();\n\n\t\t\t\t\tif( --scriptsToLoad === 0 ) {\n\t\t\t\t\t\tthis.initPlugins().then( resolve );\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Load synchronous scripts\n\t\t\t\tscripts.forEach( s => {\n\t\t\t\t\tif( typeof s.id === 'string' ) {\n\t\t\t\t\t\tthis.registerPlugin( s );\n\t\t\t\t\t\tscriptLoadedCallback( s );\n\t\t\t\t\t}\n\t\t\t\t\telse if( typeof s.src === 'string' ) {\n\t\t\t\t\t\tloadScript( s.src, () => scriptLoadedCallback(s) );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tconsole.warn( 'Unrecognized plugin format', s );\n\t\t\t\t\t\tscriptLoadedCallback();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.initPlugins().then( resolve );\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Initializes our plugins and waits for them to be ready\n\t * before proceeding.\n\t */\n\tinitPlugins() {\n\n\t\treturn new Promise( resolve => {\n\n\t\t\tlet pluginValues = Object.values( this.registeredPlugins );\n\t\t\tlet pluginsToInitialize = pluginValues.length;\n\n\t\t\t// If there are no plugins, skip this step\n\t\t\tif( pluginsToInitialize === 0 ) {\n\t\t\t\tthis.loadAsync().then( resolve );\n\t\t\t}\n\t\t\t// ... otherwise initialize plugins\n\t\t\telse {\n\n\t\t\t\tlet initNextPlugin;\n\n\t\t\t\tlet afterPlugInitialized = () => {\n\t\t\t\t\tif( --pluginsToInitialize === 0 ) {\n\t\t\t\t\t\tthis.loadAsync().then( resolve );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tinitNextPlugin();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tlet i = 0;\n\n\t\t\t\t// Initialize plugins serially\n\t\t\t\tinitNextPlugin = () => {\n\n\t\t\t\t\tlet plugin = pluginValues[i++];\n\n\t\t\t\t\t// If the plugin has an 'init' method, invoke it\n\t\t\t\t\tif( typeof plugin.init === 'function' ) {\n\t\t\t\t\t\tlet promise = plugin.init( this.Reveal );\n\n\t\t\t\t\t\t// If the plugin returned a Promise, wait for it\n\t\t\t\t\t\tif( promise && typeof promise.then === 'function' ) {\n\t\t\t\t\t\t\tpromise.then( afterPlugInitialized );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tafterPlugInitialized();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tafterPlugInitialized();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tinitNextPlugin();\n\n\t\t\t}\n\n\t\t} )\n\n\t}\n\n\t/**\n\t * Loads all async reveal.js dependencies.\n\t */\n\tloadAsync() {\n\n\t\tthis.state = 'loaded';\n\n\t\tif( this.asyncDependencies.length ) {\n\t\t\tthis.asyncDependencies.forEach( s => {\n\t\t\t\tloadScript( s.src, s.callback );\n\t\t\t} );\n\t\t}\n\n\t\treturn Promise.resolve();\n\n\t}\n\n\t/**\n\t * Registers a new plugin with this reveal.js instance.\n\t *\n\t * reveal.js waits for all regisered plugins to initialize\n\t * before considering itself ready, as long as the plugin\n\t * is registered before calling `Reveal.initialize()`.\n\t */\n\tregisterPlugin( plugin ) {\n\n\t\t// Backwards compatibility to make reveal.js ~3.9.0\n\t\t// plugins work with reveal.js 4.0.0\n\t\tif( arguments.length === 2 && typeof arguments[0] === 'string' ) {\n\t\t\tplugin = arguments[1];\n\t\t\tplugin.id = arguments[0];\n\t\t}\n\t\t// Plugin can optionally be a function which we call\n\t\t// to create an instance of the plugin\n\t\telse if( typeof plugin === 'function' ) {\n\t\t\tplugin = plugin();\n\t\t}\n\n\t\tlet id = plugin.id;\n\n\t\tif( typeof id !== 'string' ) {\n\t\t\tconsole.warn( 'Unrecognized plugin format; can\\'t find plugin.id', plugin );\n\t\t}\n\t\telse if( this.registeredPlugins[id] === undefined ) {\n\t\t\tthis.registeredPlugins[id] = plugin;\n\n\t\t\t// If a plugin is registered after reveal.js is loaded,\n\t\t\t// initialize it right away\n\t\t\tif( this.state === 'loaded' && typeof plugin.init === 'function' ) {\n\t\t\t\tplugin.init( this.Reveal );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconsole.warn( 'reveal.js: \"'+ id +'\" plugin has already been registered' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if a specific plugin has been registered.\n\t *\n\t * @param {String} id Unique plugin identifier\n\t */\n\thasPlugin( id ) {\n\n\t\treturn !!this.registeredPlugins[id];\n\n\t}\n\n\t/**\n\t * Returns the specific plugin instance, if a plugin\n\t * with the given ID has been registered.\n\t *\n\t * @param {String} id Unique plugin identifier\n\t */\n\tgetPlugin( id ) {\n\n\t\treturn this.registeredPlugins[id];\n\n\t}\n\n\tgetRegisteredPlugins() {\n\n\t\treturn this.registeredPlugins;\n\n\t}\n\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","import { SLIDES_SELECTOR } from '../utils/constants.js'\nimport { queryAll, createStyleSheet } from '../utils/util.js'\n\n/**\n * Setups up our presentation for printing/exporting to PDF.\n */\nexport default class Print {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\t/**\n\t * Configures the presentation for printing to a static\n\t * PDF.\n\t */\n\tasync setupPDF() {\n\n\t\tconst config = this.Reveal.getConfig();\n\t\tconst slides = queryAll( this.Reveal.getRevealElement(), SLIDES_SELECTOR )\n\n\t\t// Compute slide numbers now, before we start duplicating slides\n\t\tconst doingSlideNumbers = config.slideNumber && /all|print/i.test( config.showSlideNumber );\n\n\t\tconst slideSize = this.Reveal.getComputedSlideSize( window.innerWidth, window.innerHeight );\n\n\t\t// Dimensions of the PDF pages\n\t\tconst pageWidth = Math.floor( slideSize.width * ( 1 + config.margin ) ),\n\t\t\tpageHeight = Math.floor( slideSize.height * ( 1 + config.margin ) );\n\n\t\t// Dimensions of slides within the pages\n\t\tconst slideWidth = slideSize.width,\n\t\t\tslideHeight = slideSize.height;\n\n\t\tawait new Promise( requestAnimationFrame );\n\n\t\t// Let the browser know what page size we want to print\n\t\tcreateStyleSheet( '@page{size:'+ pageWidth +'px '+ pageHeight +'px; margin: 0px;}' );\n\n\t\t// Limit the size of certain elements to the dimensions of the slide\n\t\tcreateStyleSheet( '.reveal section>img, .reveal section>video, .reveal section>iframe{max-width: '+ slideWidth +'px; max-height:'+ slideHeight +'px}' );\n\n\t\tdocument.documentElement.classList.add( 'print-pdf' );\n\t\tdocument.body.style.width = pageWidth + 'px';\n\t\tdocument.body.style.height = pageHeight + 'px';\n\n\t\tconst viewportElement = document.querySelector( '.reveal-viewport' );\n\t\tlet presentationBackground;\n\t\tif( viewportElement ) {\n\t\t\tconst viewportStyles = window.getComputedStyle( viewportElement );\n\t\t\tif( viewportStyles && viewportStyles.background ) {\n\t\t\t\tpresentationBackground = viewportStyles.background;\n\t\t\t}\n\t\t}\n\n\t\t// Make sure stretch elements fit on slide\n\t\tawait new Promise( requestAnimationFrame );\n\t\tthis.Reveal.layoutSlideContents( slideWidth, slideHeight );\n\n\t\t// Batch scrollHeight access to prevent layout thrashing\n\t\tawait new Promise( requestAnimationFrame );\n\n\t\tconst slideScrollHeights = slides.map( slide => slide.scrollHeight );\n\n\t\tconst pages = [];\n\t\tconst pageContainer = slides[0].parentNode;\n\n\t\t// Slide and slide background layout\n\t\tslides.forEach( function( slide, index ) {\n\n\t\t\t// Vertical stacks are not centred since their section\n\t\t\t// children will be\n\t\t\tif( slide.classList.contains( 'stack' ) === false ) {\n\t\t\t\t// Center the slide inside of the page, giving the slide some margin\n\t\t\t\tlet left = ( pageWidth - slideWidth ) / 2;\n\t\t\t\tlet top = ( pageHeight - slideHeight ) / 2;\n\n\t\t\t\tconst contentHeight = slideScrollHeights[ index ];\n\t\t\t\tlet numberOfPages = Math.max( Math.ceil( contentHeight / pageHeight ), 1 );\n\n\t\t\t\t// Adhere to configured pages per slide limit\n\t\t\t\tnumberOfPages = Math.min( numberOfPages, config.pdfMaxPagesPerSlide );\n\n\t\t\t\t// Center slides vertically\n\t\t\t\tif( numberOfPages === 1 && config.center || slide.classList.contains( 'center' ) ) {\n\t\t\t\t\ttop = Math.max( ( pageHeight - contentHeight ) / 2, 0 );\n\t\t\t\t}\n\n\t\t\t\t// Wrap the slide in a page element and hide its overflow\n\t\t\t\t// so that no page ever flows onto another\n\t\t\t\tconst page = document.createElement( 'div' );\n\t\t\t\tpages.push( page );\n\n\t\t\t\tpage.className = 'pdf-page';\n\t\t\t\tpage.style.height = ( ( pageHeight + config.pdfPageHeightOffset ) * numberOfPages ) + 'px';\n\n\t\t\t\t// Copy the presentation-wide background to each individual\n\t\t\t\t// page when printing\n\t\t\t\tif( presentationBackground ) {\n\t\t\t\t\tpage.style.background = presentationBackground;\n\t\t\t\t}\n\n\t\t\t\tpage.appendChild( slide );\n\n\t\t\t\t// Position the slide inside of the page\n\t\t\t\tslide.style.left = left + 'px';\n\t\t\t\tslide.style.top = top + 'px';\n\t\t\t\tslide.style.width = slideWidth + 'px';\n\n\t\t\t\t// Re-run the slide layout so that r-fit-text is applied based on\n\t\t\t\t// the printed slide size\n\t\t\t\tthis.Reveal.slideContent.layout( slide )\n\n\t\t\t\tif( slide.slideBackgroundElement ) {\n\t\t\t\t\tpage.insertBefore( slide.slideBackgroundElement, slide );\n\t\t\t\t}\n\n\t\t\t\t// Inject notes if `showNotes` is enabled\n\t\t\t\tif( config.showNotes ) {\n\n\t\t\t\t\t// Are there notes for this slide?\n\t\t\t\t\tconst notes = this.Reveal.getSlideNotes( slide );\n\t\t\t\t\tif( notes ) {\n\n\t\t\t\t\t\tconst notesSpacing = 8;\n\t\t\t\t\t\tconst notesLayout = typeof config.showNotes === 'string' ? config.showNotes : 'inline';\n\t\t\t\t\t\tconst notesElement = document.createElement( 'div' );\n\t\t\t\t\t\tnotesElement.classList.add( 'speaker-notes' );\n\t\t\t\t\t\tnotesElement.classList.add( 'speaker-notes-pdf' );\n\t\t\t\t\t\tnotesElement.setAttribute( 'data-layout', notesLayout );\n\t\t\t\t\t\tnotesElement.innerHTML = notes;\n\n\t\t\t\t\t\tif( notesLayout === 'separate-page' ) {\n\t\t\t\t\t\t\tpages.push( notesElement );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tnotesElement.style.left = notesSpacing + 'px';\n\t\t\t\t\t\t\tnotesElement.style.bottom = notesSpacing + 'px';\n\t\t\t\t\t\t\tnotesElement.style.width = ( pageWidth - notesSpacing*2 ) + 'px';\n\t\t\t\t\t\t\tpage.appendChild( notesElement );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Inject slide numbers if `slideNumbers` are enabled\n\t\t\t\tif( doingSlideNumbers ) {\n\t\t\t\t\tconst slideNumber = index + 1;\n\t\t\t\t\tconst numberElement = document.createElement( 'div' );\n\t\t\t\t\tnumberElement.classList.add( 'slide-number' );\n\t\t\t\t\tnumberElement.classList.add( 'slide-number-pdf' );\n\t\t\t\t\tnumberElement.innerHTML = slideNumber;\n\t\t\t\t\tpage.appendChild( numberElement );\n\t\t\t\t}\n\n\t\t\t\t// Copy page and show fragments one after another\n\t\t\t\tif( config.pdfSeparateFragments ) {\n\n\t\t\t\t\t// Each fragment 'group' is an array containing one or more\n\t\t\t\t\t// fragments. Multiple fragments that appear at the same time\n\t\t\t\t\t// are part of the same group.\n\t\t\t\t\tconst fragmentGroups = this.Reveal.fragments.sort( page.querySelectorAll( '.fragment' ), true );\n\n\t\t\t\t\tlet previousFragmentStep;\n\n\t\t\t\t\tfragmentGroups.forEach( function( fragments ) {\n\n\t\t\t\t\t\t// Remove 'current-fragment' from the previous group\n\t\t\t\t\t\tif( previousFragmentStep ) {\n\t\t\t\t\t\t\tpreviousFragmentStep.forEach( function( fragment ) {\n\t\t\t\t\t\t\t\tfragment.classList.remove( 'current-fragment' );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Show the fragments for the current index\n\t\t\t\t\t\tfragments.forEach( function( fragment ) {\n\t\t\t\t\t\t\tfragment.classList.add( 'visible', 'current-fragment' );\n\t\t\t\t\t\t}, this );\n\n\t\t\t\t\t\t// Create a separate page for the current fragment state\n\t\t\t\t\t\tconst clonedPage = page.cloneNode( true );\n\t\t\t\t\t\tpages.push( clonedPage );\n\n\t\t\t\t\t\tpreviousFragmentStep = fragments;\n\n\t\t\t\t\t}, this );\n\n\t\t\t\t\t// Reset the first/original page so that all fragments are hidden\n\t\t\t\t\tfragmentGroups.forEach( function( fragments ) {\n\t\t\t\t\t\tfragments.forEach( function( fragment ) {\n\t\t\t\t\t\t\tfragment.classList.remove( 'visible', 'current-fragment' );\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\t\t\t\t// Show all fragments\n\t\t\t\telse {\n\t\t\t\t\tqueryAll( page, '.fragment:not(.fade-out)' ).forEach( function( fragment ) {\n\t\t\t\t\t\tfragment.classList.add( 'visible' );\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}, this );\n\n\t\tawait new Promise( requestAnimationFrame );\n\n\t\tpages.forEach( page => pageContainer.appendChild( page ) );\n\n\t\t// Notify subscribers that the PDF layout is good to go\n\t\tthis.Reveal.dispatchEvent({ type: 'pdf-ready' });\n\n\t}\n\n\t/**\n\t * Checks if this instance is being used to print a PDF.\n\t */\n\tisPrintingPDF() {\n\n\t\treturn ( /print-pdf/gi ).test( window.location.search );\n\n\t}\n\n}\n","import { isAndroid } from '../utils/device.js'\nimport { matches } from '../utils/util.js'\n\nconst SWIPE_THRESHOLD = 40;\n\n/**\n * Controls all touch interactions and navigations for\n * a presentation.\n */\nexport default class Touch {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\t// Holds information about the currently ongoing touch interaction\n\t\tthis.touchStartX = 0;\n\t\tthis.touchStartY = 0;\n\t\tthis.touchStartCount = 0;\n\t\tthis.touchCaptured = false;\n\n\t\tthis.onPointerDown = this.onPointerDown.bind( this );\n\t\tthis.onPointerMove = this.onPointerMove.bind( this );\n\t\tthis.onPointerUp = this.onPointerUp.bind( this );\n\t\tthis.onTouchStart = this.onTouchStart.bind( this );\n\t\tthis.onTouchMove = this.onTouchMove.bind( this );\n\t\tthis.onTouchEnd = this.onTouchEnd.bind( this );\n\n\t}\n\n\t/**\n\t *\n\t */\n\tbind() {\n\n\t\tlet revealElement = this.Reveal.getRevealElement();\n\n\t\tif( 'onpointerdown' in window ) {\n\t\t\t// Use W3C pointer events\n\t\t\trevealElement.addEventListener( 'pointerdown', this.onPointerDown, false );\n\t\t\trevealElement.addEventListener( 'pointermove', this.onPointerMove, false );\n\t\t\trevealElement.addEventListener( 'pointerup', this.onPointerUp, false );\n\t\t}\n\t\telse if( window.navigator.msPointerEnabled ) {\n\t\t\t// IE 10 uses prefixed version of pointer events\n\t\t\trevealElement.addEventListener( 'MSPointerDown', this.onPointerDown, false );\n\t\t\trevealElement.addEventListener( 'MSPointerMove', this.onPointerMove, false );\n\t\t\trevealElement.addEventListener( 'MSPointerUp', this.onPointerUp, false );\n\t\t}\n\t\telse {\n\t\t\t// Fall back to touch events\n\t\t\trevealElement.addEventListener( 'touchstart', this.onTouchStart, false );\n\t\t\trevealElement.addEventListener( 'touchmove', this.onTouchMove, false );\n\t\t\trevealElement.addEventListener( 'touchend', this.onTouchEnd, false );\n\t\t}\n\n\t}\n\n\t/**\n\t *\n\t */\n\tunbind() {\n\n\t\tlet revealElement = this.Reveal.getRevealElement();\n\n\t\trevealElement.removeEventListener( 'pointerdown', this.onPointerDown, false );\n\t\trevealElement.removeEventListener( 'pointermove', this.onPointerMove, false );\n\t\trevealElement.removeEventListener( 'pointerup', this.onPointerUp, false );\n\n\t\trevealElement.removeEventListener( 'MSPointerDown', this.onPointerDown, false );\n\t\trevealElement.removeEventListener( 'MSPointerMove', this.onPointerMove, false );\n\t\trevealElement.removeEventListener( 'MSPointerUp', this.onPointerUp, false );\n\n\t\trevealElement.removeEventListener( 'touchstart', this.onTouchStart, false );\n\t\trevealElement.removeEventListener( 'touchmove', this.onTouchMove, false );\n\t\trevealElement.removeEventListener( 'touchend', this.onTouchEnd, false );\n\n\t}\n\n\t/**\n\t * Checks if the target element prevents the triggering of\n\t * swipe navigation.\n\t */\n\tisSwipePrevented( target ) {\n\n\t\t// Prevent accidental swipes when scrubbing timelines\n\t\tif( matches( target, 'video, audio' ) ) return true;\n\n\t\twhile( target && typeof target.hasAttribute === 'function' ) {\n\t\t\tif( target.hasAttribute( 'data-prevent-swipe' ) ) return true;\n\t\t\ttarget = target.parentNode;\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Handler for the 'touchstart' event, enables support for\n\t * swipe and pinch gestures.\n\t *\n\t * @param {object} event\n\t */\n\tonTouchStart( event ) {\n\n\t\tif( this.isSwipePrevented( event.target ) ) return true;\n\n\t\tthis.touchStartX = event.touches[0].clientX;\n\t\tthis.touchStartY = event.touches[0].clientY;\n\t\tthis.touchStartCount = event.touches.length;\n\n\t}\n\n\t/**\n\t * Handler for the 'touchmove' event.\n\t *\n\t * @param {object} event\n\t */\n\tonTouchMove( event ) {\n\n\t\tif( this.isSwipePrevented( event.target ) ) return true;\n\n\t\tlet config = this.Reveal.getConfig();\n\n\t\t// Each touch should only trigger one action\n\t\tif( !this.touchCaptured ) {\n\t\t\tthis.Reveal.onUserInput( event );\n\n\t\t\tlet currentX = event.touches[0].clientX;\n\t\t\tlet currentY = event.touches[0].clientY;\n\n\t\t\t// There was only one touch point, look for a swipe\n\t\t\tif( event.touches.length === 1 && this.touchStartCount !== 2 ) {\n\n\t\t\t\tlet availableRoutes = this.Reveal.availableRoutes({ includeFragments: true });\n\n\t\t\t\tlet deltaX = currentX - this.touchStartX,\n\t\t\t\t\tdeltaY = currentY - this.touchStartY;\n\n\t\t\t\tif( deltaX > SWIPE_THRESHOLD && Math.abs( deltaX ) > Math.abs( deltaY ) ) {\n\t\t\t\t\tthis.touchCaptured = true;\n\t\t\t\t\tif( config.navigationMode === 'linear' ) {\n\t\t\t\t\t\tif( config.rtl ) {\n\t\t\t\t\t\t\tthis.Reveal.next();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.Reveal.prev();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.Reveal.left();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( deltaX < -SWIPE_THRESHOLD && Math.abs( deltaX ) > Math.abs( deltaY ) ) {\n\t\t\t\t\tthis.touchCaptured = true;\n\t\t\t\t\tif( config.navigationMode === 'linear' ) {\n\t\t\t\t\t\tif( config.rtl ) {\n\t\t\t\t\t\t\tthis.Reveal.prev();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.Reveal.next();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.Reveal.right();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( deltaY > SWIPE_THRESHOLD && availableRoutes.up ) {\n\t\t\t\t\tthis.touchCaptured = true;\n\t\t\t\t\tif( config.navigationMode === 'linear' ) {\n\t\t\t\t\t\tthis.Reveal.prev();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.Reveal.up();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( deltaY < -SWIPE_THRESHOLD && availableRoutes.down ) {\n\t\t\t\t\tthis.touchCaptured = true;\n\t\t\t\t\tif( config.navigationMode === 'linear' ) {\n\t\t\t\t\t\tthis.Reveal.next();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.Reveal.down();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If we're embedded, only block touch events if they have\n\t\t\t\t// triggered an action\n\t\t\t\tif( config.embedded ) {\n\t\t\t\t\tif( this.touchCaptured || this.Reveal.isVerticalSlide() ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Not embedded? Block them all to avoid needless tossing\n\t\t\t\t// around of the viewport in iOS\n\t\t\t\telse {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t\t// There's a bug with swiping on some Android devices unless\n\t\t// the default action is always prevented\n\t\telse if( isAndroid ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the 'touchend' event.\n\t *\n\t * @param {object} event\n\t */\n\tonTouchEnd( event ) {\n\n\t\tthis.touchCaptured = false;\n\n\t}\n\n\t/**\n\t * Convert pointer down to touch start.\n\t *\n\t * @param {object} event\n\t */\n\tonPointerDown( event ) {\n\n\t\tif( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === \"touch\" ) {\n\t\t\tevent.touches = [{ clientX: event.clientX, clientY: event.clientY }];\n\t\t\tthis.onTouchStart( event );\n\t\t}\n\n\t}\n\n\t/**\n\t * Convert pointer move to touch move.\n\t *\n\t * @param {object} event\n\t */\n\tonPointerMove( event ) {\n\n\t\tif( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === \"touch\" ) {\n\t\t\tevent.touches = [{ clientX: event.clientX, clientY: event.clientY }];\n\t\t\tthis.onTouchMove( event );\n\t\t}\n\n\t}\n\n\t/**\n\t * Convert pointer up to touch end.\n\t *\n\t * @param {object} event\n\t */\n\tonPointerUp( event ) {\n\n\t\tif( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === \"touch\" ) {\n\t\t\tevent.touches = [{ clientX: event.clientX, clientY: event.clientY }];\n\t\t\tthis.onTouchEnd( event );\n\t\t}\n\n\t}\n\n}","import { closest } from '../utils/util.js'\n\n/**\n * Manages focus when a presentation is embedded. This\n * helps us only capture keyboard from the presentation\n * a user is currently interacting with in a page where\n * multiple presentations are embedded.\n */\n\nconst STATE_FOCUS = 'focus';\nconst STATE_BLUR = 'blur';\n\nexport default class Focus {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.onRevealPointerDown = this.onRevealPointerDown.bind( this );\n\t\tthis.onDocumentPointerDown = this.onDocumentPointerDown.bind( this );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.embedded ) {\n\t\t\tthis.blur();\n\t\t}\n\t\telse {\n\t\t\tthis.focus();\n\t\t\tthis.unbind();\n\t\t}\n\n\t}\n\n\tbind() {\n\n\t\tif( this.Reveal.getConfig().embedded ) {\n\t\t\tthis.Reveal.getRevealElement().addEventListener( 'pointerdown', this.onRevealPointerDown, false );\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tthis.Reveal.getRevealElement().removeEventListener( 'pointerdown', this.onRevealPointerDown, false );\n\t\tdocument.removeEventListener( 'pointerdown', this.onDocumentPointerDown, false );\n\n\t}\n\n\tfocus() {\n\n\t\tif( this.state !== STATE_FOCUS ) {\n\t\t\tthis.Reveal.getRevealElement().classList.add( 'focused' );\n\t\t\tdocument.addEventListener( 'pointerdown', this.onDocumentPointerDown, false );\n\t\t}\n\n\t\tthis.state = STATE_FOCUS;\n\n\t}\n\n\tblur() {\n\n\t\tif( this.state !== STATE_BLUR ) {\n\t\t\tthis.Reveal.getRevealElement().classList.remove( 'focused' );\n\t\t\tdocument.removeEventListener( 'pointerdown', this.onDocumentPointerDown, false );\n\t\t}\n\n\t\tthis.state = STATE_BLUR;\n\n\t}\n\n\tisFocused() {\n\n\t\treturn this.state === STATE_FOCUS;\n\n\t}\n\n\tonRevealPointerDown( event ) {\n\n\t\tthis.focus();\n\n\t}\n\n\tonDocumentPointerDown( event ) {\n\n\t\tlet revealElement = closest( event.target, '.reveal' );\n\t\tif( !revealElement || revealElement !== this.Reveal.getRevealElement() ) {\n\t\t\tthis.blur();\n\t\t}\n\n\t}\n\n}","/**\n * Handles the showing and \n */\nexport default class Notes {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\trender() {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.className = 'speaker-notes';\n\t\tthis.element.setAttribute( 'data-prevent-swipe', '' );\n\t\tthis.element.setAttribute( 'tabindex', '0' );\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.showNotes ) {\n\t\t\tthis.element.setAttribute( 'data-layout', typeof config.showNotes === 'string' ? config.showNotes : 'inline' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Pick up notes from the current slide and display them\n\t * to the viewer.\n\t *\n\t * @see {@link config.showNotes}\n\t */\n\tupdate() {\n\n\t\tif( this.Reveal.getConfig().showNotes && this.element && this.Reveal.getCurrentSlide() && !this.Reveal.print.isPrintingPDF() ) {\n\n\t\t\tthis.element.innerHTML = this.getSlideNotes() || '<span class=\"notes-placeholder\">No notes on this slide.</span>';\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the visibility of the speaker notes sidebar that\n\t * is used to share annotated slides. The notes sidebar is\n\t * only visible if showNotes is true and there are notes on\n\t * one or more slides in the deck.\n\t */\n\tupdateVisibility() {\n\n\t\tif( this.Reveal.getConfig().showNotes && this.hasNotes() && !this.Reveal.print.isPrintingPDF() ) {\n\t\t\tthis.Reveal.getRevealElement().classList.add( 'show-notes' );\n\t\t}\n\t\telse {\n\t\t\tthis.Reveal.getRevealElement().classList.remove( 'show-notes' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if there are speaker notes for ANY slide in the\n\t * presentation.\n\t */\n\thasNotes() {\n\n\t\treturn this.Reveal.getSlidesElement().querySelectorAll( '[data-notes], aside.notes' ).length > 0;\n\n\t}\n\n\t/**\n\t * Checks if this presentation is running inside of the\n\t * speaker notes window.\n\t *\n\t * @return {boolean}\n\t */\n\tisSpeakerNotesWindow() {\n\n\t\treturn !!window.location.search.match( /receiver/gi );\n\n\t}\n\n\t/**\n\t * Retrieves the speaker notes from a slide. Notes can be\n\t * defined in two ways:\n\t * 1. As a data-notes attribute on the slide <section>\n\t * 2. As an <aside class=\"notes\"> inside of the slide\n\t *\n\t * @param {HTMLElement} [slide=currentSlide]\n\t * @return {(string|null)}\n\t */\n\tgetSlideNotes( slide = this.Reveal.getCurrentSlide() ) {\n\n\t\t// Notes can be specified via the data-notes attribute...\n\t\tif( slide.hasAttribute( 'data-notes' ) ) {\n\t\t\treturn slide.getAttribute( 'data-notes' );\n\t\t}\n\n\t\t// ... or using an <aside class=\"notes\"> element\n\t\tlet notesElement = slide.querySelector( 'aside.notes' );\n\t\tif( notesElement ) {\n\t\t\treturn notesElement.innerHTML;\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n}","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.fill` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = lengthOfArrayLike(O);\n var argumentsLength = arguments.length;\n var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n var end = argumentsLength > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","var $ = require('../internals/export');\nvar fill = require('../internals/array-fill');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.fill` method\n// https://tc39.es/ecma262/#sec-array.prototype.fill\n$({ target: 'Array', proto: true }, {\n fill: fill\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('fill');\n","/**\n * UI component that lets the use control auto-slide\n * playback via play/pause.\n */\nexport default class Playback {\n\n\t/**\n\t * @param {HTMLElement} container The component will append\n\t * itself to this\n\t * @param {function} progressCheck A method which will be\n\t * called frequently to get the current playback progress on\n\t * a range of 0-1\n\t */\n\tconstructor( container, progressCheck ) {\n\n\t\t// Cosmetics\n\t\tthis.diameter = 100;\n\t\tthis.diameter2 = this.diameter/2;\n\t\tthis.thickness = 6;\n\n\t\t// Flags if we are currently playing\n\t\tthis.playing = false;\n\n\t\t// Current progress on a 0-1 range\n\t\tthis.progress = 0;\n\n\t\t// Used to loop the animation smoothly\n\t\tthis.progressOffset = 1;\n\n\t\tthis.container = container;\n\t\tthis.progressCheck = progressCheck;\n\n\t\tthis.canvas = document.createElement( 'canvas' );\n\t\tthis.canvas.className = 'playback';\n\t\tthis.canvas.width = this.diameter;\n\t\tthis.canvas.height = this.diameter;\n\t\tthis.canvas.style.width = this.diameter2 + 'px';\n\t\tthis.canvas.style.height = this.diameter2 + 'px';\n\t\tthis.context = this.canvas.getContext( '2d' );\n\n\t\tthis.container.appendChild( this.canvas );\n\n\t\tthis.render();\n\n\t}\n\n\tsetPlaying( value ) {\n\n\t\tconst wasPlaying = this.playing;\n\n\t\tthis.playing = value;\n\n\t\t// Start repainting if we weren't already\n\t\tif( !wasPlaying && this.playing ) {\n\t\t\tthis.animate();\n\t\t}\n\t\telse {\n\t\t\tthis.render();\n\t\t}\n\n\t}\n\n\tanimate() {\n\n\t\tconst progressBefore = this.progress;\n\n\t\tthis.progress = this.progressCheck();\n\n\t\t// When we loop, offset the progress so that it eases\n\t\t// smoothly rather than immediately resetting\n\t\tif( progressBefore > 0.8 && this.progress < 0.2 ) {\n\t\t\tthis.progressOffset = this.progress;\n\t\t}\n\n\t\tthis.render();\n\n\t\tif( this.playing ) {\n\t\t\trequestAnimationFrame( this.animate.bind( this ) );\n\t\t}\n\n\t}\n\n\t/**\n\t * Renders the current progress and playback state.\n\t */\n\trender() {\n\n\t\tlet progress = this.playing ? this.progress : 0,\n\t\t\tradius = ( this.diameter2 ) - this.thickness,\n\t\t\tx = this.diameter2,\n\t\t\ty = this.diameter2,\n\t\t\ticonSize = 28;\n\n\t\t// Ease towards 1\n\t\tthis.progressOffset += ( 1 - this.progressOffset ) * 0.1;\n\n\t\tconst endAngle = ( - Math.PI / 2 ) + ( progress * ( Math.PI * 2 ) );\n\t\tconst startAngle = ( - Math.PI / 2 ) + ( this.progressOffset * ( Math.PI * 2 ) );\n\n\t\tthis.context.save();\n\t\tthis.context.clearRect( 0, 0, this.diameter, this.diameter );\n\n\t\t// Solid background color\n\t\tthis.context.beginPath();\n\t\tthis.context.arc( x, y, radius + 4, 0, Math.PI * 2, false );\n\t\tthis.context.fillStyle = 'rgba( 0, 0, 0, 0.4 )';\n\t\tthis.context.fill();\n\n\t\t// Draw progress track\n\t\tthis.context.beginPath();\n\t\tthis.context.arc( x, y, radius, 0, Math.PI * 2, false );\n\t\tthis.context.lineWidth = this.thickness;\n\t\tthis.context.strokeStyle = 'rgba( 255, 255, 255, 0.2 )';\n\t\tthis.context.stroke();\n\n\t\tif( this.playing ) {\n\t\t\t// Draw progress on top of track\n\t\t\tthis.context.beginPath();\n\t\t\tthis.context.arc( x, y, radius, startAngle, endAngle, false );\n\t\t\tthis.context.lineWidth = this.thickness;\n\t\t\tthis.context.strokeStyle = '#fff';\n\t\t\tthis.context.stroke();\n\t\t}\n\n\t\tthis.context.translate( x - ( iconSize / 2 ), y - ( iconSize / 2 ) );\n\n\t\t// Draw play/pause icons\n\t\tif( this.playing ) {\n\t\t\tthis.context.fillStyle = '#fff';\n\t\t\tthis.context.fillRect( 0, 0, iconSize / 2 - 4, iconSize );\n\t\t\tthis.context.fillRect( iconSize / 2 + 4, 0, iconSize / 2 - 4, iconSize );\n\t\t}\n\t\telse {\n\t\t\tthis.context.beginPath();\n\t\t\tthis.context.translate( 4, 0 );\n\t\t\tthis.context.moveTo( 0, 0 );\n\t\t\tthis.context.lineTo( iconSize - 4, iconSize / 2 );\n\t\t\tthis.context.lineTo( 0, iconSize );\n\t\t\tthis.context.fillStyle = '#fff';\n\t\t\tthis.context.fill();\n\t\t}\n\n\t\tthis.context.restore();\n\n\t}\n\n\ton( type, listener ) {\n\t\tthis.canvas.addEventListener( type, listener, false );\n\t}\n\n\toff( type, listener ) {\n\t\tthis.canvas.removeEventListener( type, listener, false );\n\t}\n\n\tdestroy() {\n\n\t\tthis.playing = false;\n\n\t\tif( this.canvas.parentNode ) {\n\t\t\tthis.container.removeChild( this.canvas );\n\t\t}\n\n\t}\n\n}","/**\n * The default reveal.js config object.\n */\nexport default {\n\n\t// The \"normal\" size of the presentation, aspect ratio will be preserved\n\t// when the presentation is scaled to fit different resolutions\n\twidth: 960,\n\theight: 700,\n\n\t// Factor of the display size that should remain empty around the content\n\tmargin: 0.04,\n\n\t// Bounds for smallest/largest possible scale to apply to content\n\tminScale: 0.2,\n\tmaxScale: 2.0,\n\n\t// Display presentation control arrows\n\tcontrols: true,\n\n\t// Help the user learn the controls by providing hints, for example by\n\t// bouncing the down arrow when they first encounter a vertical slide\n\tcontrolsTutorial: true,\n\n\t// Determines where controls appear, \"edges\" or \"bottom-right\"\n\tcontrolsLayout: 'bottom-right',\n\n\t// Visibility rule for backwards navigation arrows; \"faded\", \"hidden\"\n\t// or \"visible\"\n\tcontrolsBackArrows: 'faded',\n\n\t// Display a presentation progress bar\n\tprogress: true,\n\n\t// Display the page number of the current slide\n\t// - true: Show slide number\n\t// - false: Hide slide number\n\t//\n\t// Can optionally be set as a string that specifies the number formatting:\n\t// - \"h.v\":\t Horizontal . vertical slide number (default)\n\t// - \"h/v\":\t Horizontal / vertical slide number\n\t// - \"c\":\t Flattened slide number\n\t// - \"c/t\":\t Flattened slide number / total slides\n\t//\n\t// Alternatively, you can provide a function that returns the slide\n\t// number for the current slide. The function should take in a slide\n\t// object and return an array with one string [slideNumber] or\n\t// three strings [n1,delimiter,n2]. See #formatSlideNumber().\n\tslideNumber: false,\n\n\t// Can be used to limit the contexts in which the slide number appears\n\t// - \"all\": Always show the slide number\n\t// - \"print\": Only when printing to PDF\n\t// - \"speaker\": Only in the speaker view\n\tshowSlideNumber: 'all',\n\n\t// Use 1 based indexing for # links to match slide number (default is zero\n\t// based)\n\thashOneBasedIndex: false,\n\n\t// Add the current slide number to the URL hash so that reloading the\n\t// page/copying the URL will return you to the same slide\n\thash: false,\n\n\t// Flags if we should monitor the hash and change slides accordingly\n\trespondToHashChanges: true,\n\n\t// Push each slide change to the browser history. Implies `hash: true`\n\thistory: false,\n\n\t// Enable keyboard shortcuts for navigation\n\tkeyboard: true,\n\n\t// Optional function that blocks keyboard events when retuning false\n\t//\n\t// If you set this to 'focused', we will only capture keyboard events\n\t// for embedded decks when they are in focus\n\tkeyboardCondition: null,\n\n\t// Disables the default reveal.js slide layout (scaling and centering)\n\t// so that you can use custom CSS layout\n\tdisableLayout: false,\n\n\t// Enable the slide overview mode\n\toverview: true,\n\n\t// Vertical centering of slides\n\tcenter: true,\n\n\t// Enables touch navigation on devices with touch input\n\ttouch: true,\n\n\t// Loop the presentation\n\tloop: false,\n\n\t// Change the presentation direction to be RTL\n\trtl: false,\n\n\t// Changes the behavior of our navigation directions.\n\t//\n\t// \"default\"\n\t// Left/right arrow keys step between horizontal slides, up/down\n\t// arrow keys step between vertical slides. Space key steps through\n\t// all slides (both horizontal and vertical).\n\t//\n\t// \"linear\"\n\t// Removes the up/down arrows. Left/right arrows step through all\n\t// slides (both horizontal and vertical).\n\t//\n\t// \"grid\"\n\t// When this is enabled, stepping left/right from a vertical stack\n\t// to an adjacent vertical stack will land you at the same vertical\n\t// index.\n\t//\n\t// Consider a deck with six slides ordered in two vertical stacks:\n\t// 1.1 2.1\n\t// 1.2 2.2\n\t// 1.3 2.3\n\t//\n\t// If you're on slide 1.3 and navigate right, you will normally move\n\t// from 1.3 -> 2.1. If \"grid\" is used, the same navigation takes you\n\t// from 1.3 -> 2.3.\n\tnavigationMode: 'default',\n\n\t// Randomizes the order of slides each time the presentation loads\n\tshuffle: false,\n\n\t// Turns fragments on and off globally\n\tfragments: true,\n\n\t// Flags whether to include the current fragment in the URL,\n\t// so that reloading brings you to the same fragment position\n\tfragmentInURL: true,\n\n\t// Flags if the presentation is running in an embedded mode,\n\t// i.e. contained within a limited portion of the screen\n\tembedded: false,\n\n\t// Flags if we should show a help overlay when the question-mark\n\t// key is pressed\n\thelp: true,\n\n\t// Flags if it should be possible to pause the presentation (blackout)\n\tpause: true,\n\n\t// Flags if speaker notes should be visible to all viewers\n\tshowNotes: false,\n\n\t// Flags if slides with data-visibility=\"hidden\" should be kep visible\n\tshowHiddenSlides: false,\n\n\t// Global override for autoplaying embedded media (video/audio/iframe)\n\t// - null: Media will only autoplay if data-autoplay is present\n\t// - true: All media will autoplay, regardless of individual setting\n\t// - false: No media will autoplay, regardless of individual setting\n\tautoPlayMedia: null,\n\n\t// Global override for preloading lazy-loaded iframes\n\t// - null: Iframes with data-src AND data-preload will be loaded when within\n\t// the viewDistance, iframes with only data-src will be loaded when visible\n\t// - true: All iframes with data-src will be loaded when within the viewDistance\n\t// - false: All iframes with data-src will be loaded only when visible\n\tpreloadIframes: null,\n\n\t// Can be used to globally disable auto-animation\n\tautoAnimate: true,\n\n\t// Optionally provide a custom element matcher that will be\n\t// used to dictate which elements we can animate between.\n\tautoAnimateMatcher: null,\n\n\t// Default settings for our auto-animate transitions, can be\n\t// overridden per-slide or per-element via data arguments\n\tautoAnimateEasing: 'ease',\n\tautoAnimateDuration: 1.0,\n\tautoAnimateUnmatched: true,\n\n\t// CSS properties that can be auto-animated. Position & scale\n\t// is matched separately so there's no need to include styles\n\t// like top/right/bottom/left, width/height or margin.\n\tautoAnimateStyles: [\n\t\t'opacity',\n\t\t'color',\n\t\t'background-color',\n\t\t'padding',\n\t\t'font-size',\n\t\t'line-height',\n\t\t'letter-spacing',\n\t\t'border-width',\n\t\t'border-color',\n\t\t'border-radius',\n\t\t'outline',\n\t\t'outline-offset'\n\t],\n\n\t// Controls automatic progression to the next slide\n\t// - 0: Auto-sliding only happens if the data-autoslide HTML attribute\n\t// is present on the current slide or fragment\n\t// - 1+: All slides will progress automatically at the given interval\n\t// - false: No auto-sliding, even if data-autoslide is present\n\tautoSlide: 0,\n\n\t// Stop auto-sliding after user input\n\tautoSlideStoppable: true,\n\n\t// Use this method for navigation when auto-sliding (defaults to navigateNext)\n\tautoSlideMethod: null,\n\n\t// Specify the average time in seconds that you think you will spend\n\t// presenting each slide. This is used to show a pacing timer in the\n\t// speaker view\n\tdefaultTiming: null,\n\n\t// Enable slide navigation via mouse wheel\n\tmouseWheel: false,\n\n\t// Opens links in an iframe preview overlay\n\t// Add `data-preview-link` and `data-preview-link=\"false\"` to customise each link\n\t// individually\n\tpreviewLinks: false,\n\n\t// Exposes the reveal.js API through window.postMessage\n\tpostMessage: true,\n\n\t// Dispatches all reveal.js events to the parent window through postMessage\n\tpostMessageEvents: false,\n\n\t// Focuses body when page changes visibility to ensure keyboard shortcuts work\n\tfocusBodyOnPageVisibilityChange: true,\n\n\t// Transition style\n\ttransition: 'slide', // none/fade/slide/convex/concave/zoom\n\n\t// Transition speed\n\ttransitionSpeed: 'default', // default/fast/slow\n\n\t// Transition style for full page slide backgrounds\n\tbackgroundTransition: 'fade', // none/fade/slide/convex/concave/zoom\n\n\t// Parallax background image\n\tparallaxBackgroundImage: '', // CSS syntax, e.g. \"a.jpg\"\n\n\t// Parallax background size\n\tparallaxBackgroundSize: '', // CSS syntax, e.g. \"3000px 2000px\"\n\n\t// Parallax background repeat\n\tparallaxBackgroundRepeat: '', // repeat/repeat-x/repeat-y/no-repeat/initial/inherit\n\n\t// Parallax background position\n\tparallaxBackgroundPosition: '', // CSS syntax, e.g. \"top left\"\n\n\t// Amount of pixels to move the parallax background per slide step\n\tparallaxBackgroundHorizontal: null,\n\tparallaxBackgroundVertical: null,\n\n\t// The maximum number of pages a single slide can expand onto when printing\n\t// to PDF, unlimited by default\n\tpdfMaxPagesPerSlide: Number.POSITIVE_INFINITY,\n\n\t// Prints each fragment on a separate slide\n\tpdfSeparateFragments: true,\n\n\t// Offset used to reduce the height of content within exported PDF pages.\n\t// This exists to account for environment differences based on how you\n\t// print to PDF. CLI printing options, like phantomjs and wkpdf, can end\n\t// on precisely the total height of the document whereas in-browser\n\t// printing has to end one pixel before.\n\tpdfPageHeightOffset: -1,\n\n\t// Number of slides away from the current that are visible\n\tviewDistance: 3,\n\n\t// Number of slides away from the current that are visible on mobile\n\t// devices. It is advisable to set this to a lower number than\n\t// viewDistance in order to save resources.\n\tmobileViewDistance: 2,\n\n\t// The display mode that will be used to show slides\n\tdisplay: 'block',\n\n\t// Hide cursor if inactive\n\thideInactiveCursor: true,\n\n\t// Time before the cursor is hidden (in ms)\n\thideCursorTime: 5000,\n\n\t// Script dependencies to load\n\tdependencies: [],\n\n\t// Plugin objects to register and use for this presentation\n\tplugins: []\n\n}","import SlideContent from './controllers/slidecontent.js'\nimport SlideNumber from './controllers/slidenumber.js'\nimport Backgrounds from './controllers/backgrounds.js'\nimport AutoAnimate from './controllers/autoanimate.js'\nimport Fragments from './controllers/fragments.js'\nimport Overview from './controllers/overview.js'\nimport Keyboard from './controllers/keyboard.js'\nimport Location from './controllers/location.js'\nimport Controls from './controllers/controls.js'\nimport Progress from './controllers/progress.js'\nimport Pointer from './controllers/pointer.js'\nimport Plugins from './controllers/plugins.js'\nimport Print from './controllers/print.js'\nimport Touch from './controllers/touch.js'\nimport Focus from './controllers/focus.js'\nimport Notes from './controllers/notes.js'\nimport Playback from './components/playback.js'\nimport defaultConfig from './config.js'\nimport * as Util from './utils/util.js'\nimport * as Device from './utils/device.js'\nimport {\n\tSLIDES_SELECTOR,\n\tHORIZONTAL_SLIDES_SELECTOR,\n\tVERTICAL_SLIDES_SELECTOR,\n\tPOST_MESSAGE_METHOD_BLACKLIST\n} from './utils/constants.js'\n\n// The reveal.js version\nexport const VERSION = '4.2.1';\n\n/**\n * reveal.js\n * https://revealjs.com\n * MIT licensed\n *\n * Copyright (C) 2011-2022 Hakim El Hattab, https://hakim.se\n */\nexport default function( revealElement, options ) {\n\n\t// Support initialization with no args, one arg\n\t// [options] or two args [revealElement, options]\n\tif( arguments.length < 2 ) {\n\t\toptions = arguments[0];\n\t\trevealElement = document.querySelector( '.reveal' );\n\t}\n\n\tconst Reveal = {};\n\n\t// Configuration defaults, can be overridden at initialization time\n\tlet config = {},\n\n\t\t// Flags if reveal.js is loaded (has dispatched the 'ready' event)\n\t\tready = false,\n\n\t\t// The horizontal and vertical index of the currently active slide\n\t\tindexh,\n\t\tindexv,\n\n\t\t// The previous and current slide HTML elements\n\t\tpreviousSlide,\n\t\tcurrentSlide,\n\n\t\t// Remember which directions that the user has navigated towards\n\t\tnavigationHistory = {\n\t\t\thasNavigatedHorizontally: false,\n\t\t\thasNavigatedVertically: false\n\t\t},\n\n\t\t// Slides may have a data-state attribute which we pick up and apply\n\t\t// as a class to the body. This list contains the combined state of\n\t\t// all current slides.\n\t\tstate = [],\n\n\t\t// The current scale of the presentation (see width/height config)\n\t\tscale = 1,\n\n\t\t// CSS transform that is currently applied to the slides container,\n\t\t// split into two groups\n\t\tslidesTransform = { layout: '', overview: '' },\n\n\t\t// Cached references to DOM elements\n\t\tdom = {},\n\n\t\t// Flags if the interaction event listeners are bound\n\t\teventsAreBound = false,\n\n\t\t// The current slide transition state; idle or running\n\t\ttransition = 'idle',\n\n\t\t// The current auto-slide duration\n\t\tautoSlide = 0,\n\n\t\t// Auto slide properties\n\t\tautoSlidePlayer,\n\t\tautoSlideTimeout = 0,\n\t\tautoSlideStartTime = -1,\n\t\tautoSlidePaused = false,\n\n\t\t// Controllers for different aspects of our presentation. They're\n\t\t// all given direct references to this Reveal instance since there\n\t\t// may be multiple presentations running in parallel.\n\t\tslideContent = new SlideContent( Reveal ),\n\t\tslideNumber = new SlideNumber( Reveal ),\n\t\tautoAnimate = new AutoAnimate( Reveal ),\n\t\tbackgrounds = new Backgrounds( Reveal ),\n\t\tfragments = new Fragments( Reveal ),\n\t\toverview = new Overview( Reveal ),\n\t\tkeyboard = new Keyboard( Reveal ),\n\t\tlocation = new Location( Reveal ),\n\t\tcontrols = new Controls( Reveal ),\n\t\tprogress = new Progress( Reveal ),\n\t\tpointer = new Pointer( Reveal ),\n\t\tplugins = new Plugins( Reveal ),\n\t\tprint = new Print( Reveal ),\n\t\tfocus = new Focus( Reveal ),\n\t\ttouch = new Touch( Reveal ),\n\t\tnotes = new Notes( Reveal );\n\n\t/**\n\t * Starts up the presentation.\n\t */\n\tfunction initialize( initOptions ) {\n\n\t\tif( !revealElement ) throw 'Unable to find presentation root (<div class=\"reveal\">).';\n\n\t\t// Cache references to key DOM elements\n\t\tdom.wrapper = revealElement;\n\t\tdom.slides = revealElement.querySelector( '.slides' );\n\n\t\tif( !dom.slides ) throw 'Unable to find slides container (<div class=\"slides\">).';\n\n\t\t// Compose our config object in order of increasing precedence:\n\t\t// 1. Default reveal.js options\n\t\t// 2. Options provided via Reveal.configure() prior to\n\t\t// initialization\n\t\t// 3. Options passed to the Reveal constructor\n\t\t// 4. Options passed to Reveal.initialize\n\t\t// 5. Query params\n\t\tconfig = { ...defaultConfig, ...config, ...options, ...initOptions, ...Util.getQueryHash() };\n\n\t\tsetViewport();\n\n\t\t// Force a layout when the whole page, incl fonts, has loaded\n\t\twindow.addEventListener( 'load', layout, false );\n\n\t\t// Register plugins and load dependencies, then move on to #start()\n\t\tplugins.load( config.plugins, config.dependencies ).then( start );\n\n\t\treturn new Promise( resolve => Reveal.on( 'ready', resolve ) );\n\n\t}\n\n\t/**\n\t * Encase the presentation in a reveal.js viewport. The\n\t * extent of the viewport differs based on configuration.\n\t */\n\tfunction setViewport() {\n\n\t\t// Embedded decks use the reveal element as their viewport\n\t\tif( config.embedded === true ) {\n\t\t\tdom.viewport = Util.closest( revealElement, '.reveal-viewport' ) || revealElement;\n\t\t}\n\t\t// Full-page decks use the body as their viewport\n\t\telse {\n\t\t\tdom.viewport = document.body;\n\t\t\tdocument.documentElement.classList.add( 'reveal-full-page' );\n\t\t}\n\n\t\tdom.viewport.classList.add( 'reveal-viewport' );\n\n\t}\n\n\t/**\n\t * Starts up reveal.js by binding input events and navigating\n\t * to the current URL deeplink if there is one.\n\t */\n\tfunction start() {\n\n\t\tready = true;\n\n\t\t// Remove slides hidden with data-visibility\n\t\tremoveHiddenSlides();\n\n\t\t// Make sure we've got all the DOM elements we need\n\t\tsetupDOM();\n\n\t\t// Listen to messages posted to this window\n\t\tsetupPostMessage();\n\n\t\t// Prevent the slides from being scrolled out of view\n\t\tsetupScrollPrevention();\n\n\t\t// Adds bindings for fullscreen mode\n\t\tsetupFullscreen();\n\n\t\t// Resets all vertical slides so that only the first is visible\n\t\tresetVerticalSlides();\n\n\t\t// Updates the presentation to match the current configuration values\n\t\tconfigure();\n\n\t\t// Read the initial hash\n\t\tlocation.readURL();\n\n\t\t// Create slide backgrounds\n\t\tbackgrounds.update( true );\n\n\t\t// Notify listeners that the presentation is ready but use a 1ms\n\t\t// timeout to ensure it's not fired synchronously after #initialize()\n\t\tsetTimeout( () => {\n\t\t\t// Enable transitions now that we're loaded\n\t\t\tdom.slides.classList.remove( 'no-transition' );\n\n\t\t\tdom.wrapper.classList.add( 'ready' );\n\n\t\t\tdispatchEvent({\n\t\t\t\ttype: 'ready',\n\t\t\t\tdata: {\n\t\t\t\t\tindexh,\n\t\t\t\t\tindexv,\n\t\t\t\t\tcurrentSlide\n\t\t\t\t}\n\t\t\t});\n\t\t}, 1 );\n\n\t\t// Special setup and config is required when printing to PDF\n\t\tif( print.isPrintingPDF() ) {\n\t\t\tremoveEventListeners();\n\n\t\t\t// The document needs to have loaded for the PDF layout\n\t\t\t// measurements to be accurate\n\t\t\tif( document.readyState === 'complete' ) {\n\t\t\t\tprint.setupPDF();\n\t\t\t}\n\t\t\telse {\n\t\t\t\twindow.addEventListener( 'load', () => {\n\t\t\t\t\tprint.setupPDF();\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Removes all slides with data-visibility=\"hidden\". This\n\t * is done right before the rest of the presentation is\n\t * initialized.\n\t *\n\t * If you want to show all hidden slides, initialize\n\t * reveal.js with showHiddenSlides set to true.\n\t */\n\tfunction removeHiddenSlides() {\n\n\t\tif( !config.showHiddenSlides ) {\n\t\t\tUtil.queryAll( dom.wrapper, 'section[data-visibility=\"hidden\"]' ).forEach( slide => {\n\t\t\t\tslide.parentNode.removeChild( slide );\n\t\t\t} );\n\t\t}\n\n\t}\n\n\t/**\n\t * Finds and stores references to DOM elements which are\n\t * required by the presentation. If a required element is\n\t * not found, it is created.\n\t */\n\tfunction setupDOM() {\n\n\t\t// Prevent transitions while we're loading\n\t\tdom.slides.classList.add( 'no-transition' );\n\n\t\tif( Device.isMobile ) {\n\t\t\tdom.wrapper.classList.add( 'no-hover' );\n\t\t}\n\t\telse {\n\t\t\tdom.wrapper.classList.remove( 'no-hover' );\n\t\t}\n\n\t\tbackgrounds.render();\n\t\tslideNumber.render();\n\t\tcontrols.render();\n\t\tprogress.render();\n\t\tnotes.render();\n\n\t\t// Overlay graphic which is displayed during the paused mode\n\t\tdom.pauseOverlay = Util.createSingletonNode( dom.wrapper, 'div', 'pause-overlay', config.controls ? '<button class=\"resume-button\">Resume presentation</button>' : null );\n\n\t\tdom.statusElement = createStatusElement();\n\n\t\tdom.wrapper.setAttribute( 'role', 'application' );\n\t}\n\n\t/**\n\t * Creates a hidden div with role aria-live to announce the\n\t * current slide content. Hide the div off-screen to make it\n\t * available only to Assistive Technologies.\n\t *\n\t * @return {HTMLElement}\n\t */\n\tfunction createStatusElement() {\n\n\t\tlet statusElement = dom.wrapper.querySelector( '.aria-status' );\n\t\tif( !statusElement ) {\n\t\t\tstatusElement = document.createElement( 'div' );\n\t\t\tstatusElement.style.position = 'absolute';\n\t\t\tstatusElement.style.height = '1px';\n\t\t\tstatusElement.style.width = '1px';\n\t\t\tstatusElement.style.overflow = 'hidden';\n\t\t\tstatusElement.style.clip = 'rect( 1px, 1px, 1px, 1px )';\n\t\t\tstatusElement.classList.add( 'aria-status' );\n\t\t\tstatusElement.setAttribute( 'aria-live', 'polite' );\n\t\t\tstatusElement.setAttribute( 'aria-atomic','true' );\n\t\t\tdom.wrapper.appendChild( statusElement );\n\t\t}\n\t\treturn statusElement;\n\n\t}\n\n\t/**\n\t * Announces the given text to screen readers.\n\t */\n\tfunction announceStatus( value ) {\n\n\t\tdom.statusElement.textContent = value;\n\n\t}\n\n\t/**\n\t * Converts the given HTML element into a string of text\n\t * that can be announced to a screen reader. Hidden\n\t * elements are excluded.\n\t */\n\tfunction getStatusText( node ) {\n\n\t\tlet text = '';\n\n\t\t// Text node\n\t\tif( node.nodeType === 3 ) {\n\t\t\ttext += node.textContent;\n\t\t}\n\t\t// Element node\n\t\telse if( node.nodeType === 1 ) {\n\n\t\t\tlet isAriaHidden = node.getAttribute( 'aria-hidden' );\n\t\t\tlet isDisplayHidden = window.getComputedStyle( node )['display'] === 'none';\n\t\t\tif( isAriaHidden !== 'true' && !isDisplayHidden ) {\n\n\t\t\t\tArray.from( node.childNodes ).forEach( child => {\n\t\t\t\t\ttext += getStatusText( child );\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t\ttext = text.trim();\n\n\t\treturn text === '' ? '' : text + ' ';\n\n\t}\n\n\t/**\n\t * This is an unfortunate necessity. Some actions – such as\n\t * an input field being focused in an iframe or using the\n\t * keyboard to expand text selection beyond the bounds of\n\t * a slide – can trigger our content to be pushed out of view.\n\t * This scrolling can not be prevented by hiding overflow in\n\t * CSS (we already do) so we have to resort to repeatedly\n\t * checking if the slides have been offset :(\n\t */\n\tfunction setupScrollPrevention() {\n\n\t\tsetInterval( () => {\n\t\t\tif( dom.wrapper.scrollTop !== 0 || dom.wrapper.scrollLeft !== 0 ) {\n\t\t\t\tdom.wrapper.scrollTop = 0;\n\t\t\t\tdom.wrapper.scrollLeft = 0;\n\t\t\t}\n\t\t}, 1000 );\n\n\t}\n\n\t/**\n\t * After entering fullscreen we need to force a layout to\n\t * get our presentations to scale correctly. This behavior\n\t * is inconsistent across browsers but a force layout seems\n\t * to normalize it.\n\t */\n\tfunction setupFullscreen() {\n\n\t\tdocument.addEventListener( 'fullscreenchange', onFullscreenChange );\n\t\tdocument.addEventListener( 'webkitfullscreenchange', onFullscreenChange );\n\n\t}\n\n\t/**\n\t * Registers a listener to postMessage events, this makes it\n\t * possible to call all reveal.js API methods from another\n\t * window. For example:\n\t *\n\t * revealWindow.postMessage( JSON.stringify({\n\t * method: 'slide',\n\t * args: [ 2 ]\n\t * }), '*' );\n\t */\n\tfunction setupPostMessage() {\n\n\t\tif( config.postMessage ) {\n\t\t\twindow.addEventListener( 'message', event => {\n\t\t\t\tlet data = event.data;\n\n\t\t\t\t// Make sure we're dealing with JSON\n\t\t\t\tif( typeof data === 'string' && data.charAt( 0 ) === '{' && data.charAt( data.length - 1 ) === '}' ) {\n\t\t\t\t\tdata = JSON.parse( data );\n\n\t\t\t\t\t// Check if the requested method can be found\n\t\t\t\t\tif( data.method && typeof Reveal[data.method] === 'function' ) {\n\n\t\t\t\t\t\tif( POST_MESSAGE_METHOD_BLACKLIST.test( data.method ) === false ) {\n\n\t\t\t\t\t\t\tconst result = Reveal[data.method].apply( Reveal, data.args );\n\n\t\t\t\t\t\t\t// Dispatch a postMessage event with the returned value from\n\t\t\t\t\t\t\t// our method invocation for getter functions\n\t\t\t\t\t\t\tdispatchPostMessage( 'callback', { method: data.method, result: result } );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconsole.warn( 'reveal.js: \"'+ data.method +'\" is is blacklisted from the postMessage API' );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, false );\n\t\t}\n\n\t}\n\n\t/**\n\t * Applies the configuration settings from the config\n\t * object. May be called multiple times.\n\t *\n\t * @param {object} options\n\t */\n\tfunction configure( options ) {\n\n\t\tconst oldConfig = { ...config }\n\n\t\t// New config options may be passed when this method\n\t\t// is invoked through the API after initialization\n\t\tif( typeof options === 'object' ) Util.extend( config, options );\n\n\t\t// Abort if reveal.js hasn't finished loading, config\n\t\t// changes will be applied automatically once ready\n\t\tif( Reveal.isReady() === false ) return;\n\n\t\tconst numberOfSlides = dom.wrapper.querySelectorAll( SLIDES_SELECTOR ).length;\n\n\t\t// The transition is added as a class on the .reveal element\n\t\tdom.wrapper.classList.remove( oldConfig.transition );\n\t\tdom.wrapper.classList.add( config.transition );\n\n\t\tdom.wrapper.setAttribute( 'data-transition-speed', config.transitionSpeed );\n\t\tdom.wrapper.setAttribute( 'data-background-transition', config.backgroundTransition );\n\n\t\t// Expose our configured slide dimensions as custom props\n\t\tdom.viewport.style.setProperty( '--slide-width', config.width + 'px' );\n\t\tdom.viewport.style.setProperty( '--slide-height', config.height + 'px' );\n\n\t\tif( config.shuffle ) {\n\t\t\tshuffle();\n\t\t}\n\n\t\tUtil.toggleClass( dom.wrapper, 'embedded', config.embedded );\n\t\tUtil.toggleClass( dom.wrapper, 'rtl', config.rtl );\n\t\tUtil.toggleClass( dom.wrapper, 'center', config.center );\n\n\t\t// Exit the paused mode if it was configured off\n\t\tif( config.pause === false ) {\n\t\t\tresume();\n\t\t}\n\n\t\t// Iframe link previews\n\t\tif( config.previewLinks ) {\n\t\t\tenablePreviewLinks();\n\t\t\tdisablePreviewLinks( '[data-preview-link=false]' );\n\t\t}\n\t\telse {\n\t\t\tdisablePreviewLinks();\n\t\t\tenablePreviewLinks( '[data-preview-link]:not([data-preview-link=false])' );\n\t\t}\n\n\t\t// Reset all changes made by auto-animations\n\t\tautoAnimate.reset();\n\n\t\t// Remove existing auto-slide controls\n\t\tif( autoSlidePlayer ) {\n\t\t\tautoSlidePlayer.destroy();\n\t\t\tautoSlidePlayer = null;\n\t\t}\n\n\t\t// Generate auto-slide controls if needed\n\t\tif( numberOfSlides > 1 && config.autoSlide && config.autoSlideStoppable ) {\n\t\t\tautoSlidePlayer = new Playback( dom.wrapper, () => {\n\t\t\t\treturn Math.min( Math.max( ( Date.now() - autoSlideStartTime ) / autoSlide, 0 ), 1 );\n\t\t\t} );\n\n\t\t\tautoSlidePlayer.on( 'click', onAutoSlidePlayerClick );\n\t\t\tautoSlidePaused = false;\n\t\t}\n\n\t\t// Add the navigation mode to the DOM so we can adjust styling\n\t\tif( config.navigationMode !== 'default' ) {\n\t\t\tdom.wrapper.setAttribute( 'data-navigation-mode', config.navigationMode );\n\t\t}\n\t\telse {\n\t\t\tdom.wrapper.removeAttribute( 'data-navigation-mode' );\n\t\t}\n\n\t\tnotes.configure( config, oldConfig );\n\t\tfocus.configure( config, oldConfig );\n\t\tpointer.configure( config, oldConfig );\n\t\tcontrols.configure( config, oldConfig );\n\t\tprogress.configure( config, oldConfig );\n\t\tkeyboard.configure( config, oldConfig );\n\t\tfragments.configure( config, oldConfig );\n\t\tslideNumber.configure( config, oldConfig );\n\n\t\tsync();\n\n\t}\n\n\t/**\n\t * Binds all event listeners.\n\t */\n\tfunction addEventListeners() {\n\n\t\teventsAreBound = true;\n\n\t\twindow.addEventListener( 'resize', onWindowResize, false );\n\n\t\tif( config.touch ) touch.bind();\n\t\tif( config.keyboard ) keyboard.bind();\n\t\tif( config.progress ) progress.bind();\n\t\tif( config.respondToHashChanges ) location.bind();\n\t\tcontrols.bind();\n\t\tfocus.bind();\n\n\t\tdom.slides.addEventListener( 'click', onSlidesClicked, false );\n\t\tdom.slides.addEventListener( 'transitionend', onTransitionEnd, false );\n\t\tdom.pauseOverlay.addEventListener( 'click', resume, false );\n\n\t\tif( config.focusBodyOnPageVisibilityChange ) {\n\t\t\tdocument.addEventListener( 'visibilitychange', onPageVisibilityChange, false );\n\t\t}\n\n\t}\n\n\t/**\n\t * Unbinds all event listeners.\n\t */\n\tfunction removeEventListeners() {\n\n\t\teventsAreBound = false;\n\n\t\ttouch.unbind();\n\t\tfocus.unbind();\n\t\tkeyboard.unbind();\n\t\tcontrols.unbind();\n\t\tprogress.unbind();\n\t\tlocation.unbind();\n\n\t\twindow.removeEventListener( 'resize', onWindowResize, false );\n\n\t\tdom.slides.removeEventListener( 'click', onSlidesClicked, false );\n\t\tdom.slides.removeEventListener( 'transitionend', onTransitionEnd, false );\n\t\tdom.pauseOverlay.removeEventListener( 'click', resume, false );\n\n\t}\n\n\t/**\n\t * Adds a listener to one of our custom reveal.js events,\n\t * like slidechanged.\n\t */\n\tfunction on( type, listener, useCapture ) {\n\n\t\trevealElement.addEventListener( type, listener, useCapture );\n\n\t}\n\n\t/**\n\t * Unsubscribes from a reveal.js event.\n\t */\n\tfunction off( type, listener, useCapture ) {\n\n\t\trevealElement.removeEventListener( type, listener, useCapture );\n\n\t}\n\n\t/**\n\t * Applies CSS transforms to the slides container. The container\n\t * is transformed from two separate sources: layout and the overview\n\t * mode.\n\t *\n\t * @param {object} transforms\n\t */\n\tfunction transformSlides( transforms ) {\n\n\t\t// Pick up new transforms from arguments\n\t\tif( typeof transforms.layout === 'string' ) slidesTransform.layout = transforms.layout;\n\t\tif( typeof transforms.overview === 'string' ) slidesTransform.overview = transforms.overview;\n\n\t\t// Apply the transforms to the slides container\n\t\tif( slidesTransform.layout ) {\n\t\t\tUtil.transformElement( dom.slides, slidesTransform.layout + ' ' + slidesTransform.overview );\n\t\t}\n\t\telse {\n\t\t\tUtil.transformElement( dom.slides, slidesTransform.overview );\n\t\t}\n\n\t}\n\n\t/**\n\t * Dispatches an event of the specified type from the\n\t * reveal DOM element.\n\t */\n\tfunction dispatchEvent({ target=dom.wrapper, type, data, bubbles=true }) {\n\n\t\tlet event = document.createEvent( 'HTMLEvents', 1, 2 );\n\t\tevent.initEvent( type, bubbles, true );\n\t\tUtil.extend( event, data );\n\t\ttarget.dispatchEvent( event );\n\n\t\tif( target === dom.wrapper ) {\n\t\t\t// If we're in an iframe, post each reveal.js event to the\n\t\t\t// parent window. Used by the notes plugin\n\t\t\tdispatchPostMessage( type );\n\t\t}\n\n\t\treturn event;\n\n\t}\n\n\t/**\n\t * Dispatched a postMessage of the given type from our window.\n\t */\n\tfunction dispatchPostMessage( type, data ) {\n\n\t\tif( config.postMessageEvents && window.parent !== window.self ) {\n\t\t\tlet message = {\n\t\t\t\tnamespace: 'reveal',\n\t\t\t\teventName: type,\n\t\t\t\tstate: getState()\n\t\t\t};\n\n\t\t\tUtil.extend( message, data );\n\n\t\t\twindow.parent.postMessage( JSON.stringify( message ), '*' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Bind preview frame links.\n\t *\n\t * @param {string} [selector=a] - selector for anchors\n\t */\n\tfunction enablePreviewLinks( selector = 'a' ) {\n\n\t\tArray.from( dom.wrapper.querySelectorAll( selector ) ).forEach( element => {\n\t\t\tif( /^(http|www)/gi.test( element.getAttribute( 'href' ) ) ) {\n\t\t\t\telement.addEventListener( 'click', onPreviewLinkClicked, false );\n\t\t\t}\n\t\t} );\n\n\t}\n\n\t/**\n\t * Unbind preview frame links.\n\t */\n\tfunction disablePreviewLinks( selector = 'a' ) {\n\n\t\tArray.from( dom.wrapper.querySelectorAll( selector ) ).forEach( element => {\n\t\t\tif( /^(http|www)/gi.test( element.getAttribute( 'href' ) ) ) {\n\t\t\t\telement.removeEventListener( 'click', onPreviewLinkClicked, false );\n\t\t\t}\n\t\t} );\n\n\t}\n\n\t/**\n\t * Opens a preview window for the target URL.\n\t *\n\t * @param {string} url - url for preview iframe src\n\t */\n\tfunction showPreview( url ) {\n\n\t\tcloseOverlay();\n\n\t\tdom.overlay = document.createElement( 'div' );\n\t\tdom.overlay.classList.add( 'overlay' );\n\t\tdom.overlay.classList.add( 'overlay-preview' );\n\t\tdom.wrapper.appendChild( dom.overlay );\n\n\t\tdom.overlay.innerHTML =\n\t\t\t`<header>\n\t\t\t\t<a class=\"close\" href=\"#\"><span class=\"icon\"></span></a>\n\t\t\t\t<a class=\"external\" href=\"${url}\" target=\"_blank\"><span class=\"icon\"></span></a>\n\t\t\t</header>\n\t\t\t<div class=\"spinner\"></div>\n\t\t\t<div class=\"viewport\">\n\t\t\t\t<iframe src=\"${url}\"></iframe>\n\t\t\t\t<small class=\"viewport-inner\">\n\t\t\t\t\t<span class=\"x-frame-error\">Unable to load iframe. This is likely due to the site's policy (x-frame-options).</span>\n\t\t\t\t</small>\n\t\t\t</div>`;\n\n\t\tdom.overlay.querySelector( 'iframe' ).addEventListener( 'load', event => {\n\t\t\tdom.overlay.classList.add( 'loaded' );\n\t\t}, false );\n\n\t\tdom.overlay.querySelector( '.close' ).addEventListener( 'click', event => {\n\t\t\tcloseOverlay();\n\t\t\tevent.preventDefault();\n\t\t}, false );\n\n\t\tdom.overlay.querySelector( '.external' ).addEventListener( 'click', event => {\n\t\t\tcloseOverlay();\n\t\t}, false );\n\n\t}\n\n\t/**\n\t * Open or close help overlay window.\n\t *\n\t * @param {Boolean} [override] Flag which overrides the\n\t * toggle logic and forcibly sets the desired state. True means\n\t * help is open, false means it's closed.\n\t */\n\tfunction toggleHelp( override ){\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? showHelp() : closeOverlay();\n\t\t}\n\t\telse {\n\t\t\tif( dom.overlay ) {\n\t\t\t\tcloseOverlay();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tshowHelp();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Opens an overlay window with help material.\n\t */\n\tfunction showHelp() {\n\n\t\tif( config.help ) {\n\n\t\t\tcloseOverlay();\n\n\t\t\tdom.overlay = document.createElement( 'div' );\n\t\t\tdom.overlay.classList.add( 'overlay' );\n\t\t\tdom.overlay.classList.add( 'overlay-help' );\n\t\t\tdom.wrapper.appendChild( dom.overlay );\n\n\t\t\tlet html = '<p class=\"title\">Keyboard Shortcuts</p><br/>';\n\n\t\t\tlet shortcuts = keyboard.getShortcuts(),\n\t\t\t\tbindings = keyboard.getBindings();\n\n\t\t\thtml += '<table><th>KEY</th><th>ACTION</th>';\n\t\t\tfor( let key in shortcuts ) {\n\t\t\t\thtml += `<tr><td>${key}</td><td>${shortcuts[ key ]}</td></tr>`;\n\t\t\t}\n\n\t\t\t// Add custom key bindings that have associated descriptions\n\t\t\tfor( let binding in bindings ) {\n\t\t\t\tif( bindings[binding].key && bindings[binding].description ) {\n\t\t\t\t\thtml += `<tr><td>${bindings[binding].key}</td><td>${bindings[binding].description}</td></tr>`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\thtml += '</table>';\n\n\t\t\tdom.overlay.innerHTML = `\n\t\t\t\t<header>\n\t\t\t\t\t<a class=\"close\" href=\"#\"><span class=\"icon\"></span></a>\n\t\t\t\t</header>\n\t\t\t\t<div class=\"viewport\">\n\t\t\t\t\t<div class=\"viewport-inner\">${html}</div>\n\t\t\t\t</div>\n\t\t\t`;\n\n\t\t\tdom.overlay.querySelector( '.close' ).addEventListener( 'click', event => {\n\t\t\t\tcloseOverlay();\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Closes any currently open overlay.\n\t */\n\tfunction closeOverlay() {\n\n\t\tif( dom.overlay ) {\n\t\t\tdom.overlay.parentNode.removeChild( dom.overlay );\n\t\t\tdom.overlay = null;\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Applies JavaScript-controlled layout rules to the\n\t * presentation.\n\t */\n\tfunction layout() {\n\n\t\tif( dom.wrapper && !print.isPrintingPDF() ) {\n\n\t\t\tif( !config.disableLayout ) {\n\n\t\t\t\t// On some mobile devices '100vh' is taller than the visible\n\t\t\t\t// viewport which leads to part of the presentation being\n\t\t\t\t// cut off. To work around this we define our own '--vh' custom\n\t\t\t\t// property where 100x adds up to the correct height.\n\t\t\t\t//\n\t\t\t\t// https://css-tricks.com/the-trick-to-viewport-units-on-mobile/\n\t\t\t\tif( Device.isMobile && !config.embedded ) {\n\t\t\t\t\tdocument.documentElement.style.setProperty( '--vh', ( window.innerHeight * 0.01 ) + 'px' );\n\t\t\t\t}\n\n\t\t\t\tconst size = getComputedSlideSize();\n\n\t\t\t\tconst oldScale = scale;\n\n\t\t\t\t// Layout the contents of the slides\n\t\t\t\tlayoutSlideContents( config.width, config.height );\n\n\t\t\t\tdom.slides.style.width = size.width + 'px';\n\t\t\t\tdom.slides.style.height = size.height + 'px';\n\n\t\t\t\t// Determine scale of content to fit within available space\n\t\t\t\tscale = Math.min( size.presentationWidth / size.width, size.presentationHeight / size.height );\n\n\t\t\t\t// Respect max/min scale settings\n\t\t\t\tscale = Math.max( scale, config.minScale );\n\t\t\t\tscale = Math.min( scale, config.maxScale );\n\n\t\t\t\t// Don't apply any scaling styles if scale is 1\n\t\t\t\tif( scale === 1 ) {\n\t\t\t\t\tdom.slides.style.zoom = '';\n\t\t\t\t\tdom.slides.style.left = '';\n\t\t\t\t\tdom.slides.style.top = '';\n\t\t\t\t\tdom.slides.style.bottom = '';\n\t\t\t\t\tdom.slides.style.right = '';\n\t\t\t\t\ttransformSlides( { layout: '' } );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Zoom Scaling\n\t\t\t\t\t// Content remains crisp no matter how much we scale. Side\n\t\t\t\t\t// effects are minor differences in text layout and iframe\n\t\t\t\t\t// viewports changing size. A 200x200 iframe viewport in a\n\t\t\t\t\t// 2x zoomed presentation ends up having a 400x400 viewport.\n\t\t\t\t\tif( scale > 1 && Device.supportsZoom && window.devicePixelRatio < 2 ) {\n\t\t\t\t\t\tdom.slides.style.zoom = scale;\n\t\t\t\t\t\tdom.slides.style.left = '';\n\t\t\t\t\t\tdom.slides.style.top = '';\n\t\t\t\t\t\tdom.slides.style.bottom = '';\n\t\t\t\t\t\tdom.slides.style.right = '';\n\t\t\t\t\t\ttransformSlides( { layout: '' } );\n\t\t\t\t\t}\n\t\t\t\t\t// Transform Scaling\n\t\t\t\t\t// Content layout remains the exact same when scaled up.\n\t\t\t\t\t// Side effect is content becoming blurred, especially with\n\t\t\t\t\t// high scale values on ldpi screens.\n\t\t\t\t\telse {\n\t\t\t\t\t\tdom.slides.style.zoom = '';\n\t\t\t\t\t\tdom.slides.style.left = '50%';\n\t\t\t\t\t\tdom.slides.style.top = '50%';\n\t\t\t\t\t\tdom.slides.style.bottom = 'auto';\n\t\t\t\t\t\tdom.slides.style.right = 'auto';\n\t\t\t\t\t\ttransformSlides( { layout: 'translate(-50%, -50%) scale('+ scale +')' } );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Select all slides, vertical and horizontal\n\t\t\t\tconst slides = Array.from( dom.wrapper.querySelectorAll( SLIDES_SELECTOR ) );\n\n\t\t\t\tfor( let i = 0, len = slides.length; i < len; i++ ) {\n\t\t\t\t\tconst slide = slides[ i ];\n\n\t\t\t\t\t// Don't bother updating invisible slides\n\t\t\t\t\tif( slide.style.display === 'none' ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif( config.center || slide.classList.contains( 'center' ) ) {\n\t\t\t\t\t\t// Vertical stacks are not centred since their section\n\t\t\t\t\t\t// children will be\n\t\t\t\t\t\tif( slide.classList.contains( 'stack' ) ) {\n\t\t\t\t\t\t\tslide.style.top = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tslide.style.top = Math.max( ( size.height - slide.scrollHeight ) / 2, 0 ) + 'px';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tslide.style.top = '';\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif( oldScale !== scale ) {\n\t\t\t\t\tdispatchEvent({\n\t\t\t\t\t\ttype: 'resize',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\toldScale,\n\t\t\t\t\t\t\tscale,\n\t\t\t\t\t\t\tsize\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tprogress.update();\n\t\t\tbackgrounds.updateParallax();\n\n\t\t\tif( overview.isActive() ) {\n\t\t\t\toverview.update();\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Applies layout logic to the contents of all slides in\n\t * the presentation.\n\t *\n\t * @param {string|number} width\n\t * @param {string|number} height\n\t */\n\tfunction layoutSlideContents( width, height ) {\n\n\t\t// Handle sizing of elements with the 'r-stretch' class\n\t\tUtil.queryAll( dom.slides, 'section > .stretch, section > .r-stretch' ).forEach( element => {\n\n\t\t\t// Determine how much vertical space we can use\n\t\t\tlet remainingHeight = Util.getRemainingHeight( element, height );\n\n\t\t\t// Consider the aspect ratio of media elements\n\t\t\tif( /(img|video)/gi.test( element.nodeName ) ) {\n\t\t\t\tconst nw = element.naturalWidth || element.videoWidth,\n\t\t\t\t\t nh = element.naturalHeight || element.videoHeight;\n\n\t\t\t\tconst es = Math.min( width / nw, remainingHeight / nh );\n\n\t\t\t\telement.style.width = ( nw * es ) + 'px';\n\t\t\t\telement.style.height = ( nh * es ) + 'px';\n\n\t\t\t}\n\t\t\telse {\n\t\t\t\telement.style.width = width + 'px';\n\t\t\t\telement.style.height = remainingHeight + 'px';\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Calculates the computed pixel size of our slides. These\n\t * values are based on the width and height configuration\n\t * options.\n\t *\n\t * @param {number} [presentationWidth=dom.wrapper.offsetWidth]\n\t * @param {number} [presentationHeight=dom.wrapper.offsetHeight]\n\t */\n\tfunction getComputedSlideSize( presentationWidth, presentationHeight ) {\n\n\t\tconst size = {\n\t\t\t// Slide size\n\t\t\twidth: config.width,\n\t\t\theight: config.height,\n\n\t\t\t// Presentation size\n\t\t\tpresentationWidth: presentationWidth || dom.wrapper.offsetWidth,\n\t\t\tpresentationHeight: presentationHeight || dom.wrapper.offsetHeight\n\t\t};\n\n\t\t// Reduce available space by margin\n\t\tsize.presentationWidth -= ( size.presentationWidth * config.margin );\n\t\tsize.presentationHeight -= ( size.presentationHeight * config.margin );\n\n\t\t// Slide width may be a percentage of available width\n\t\tif( typeof size.width === 'string' && /%$/.test( size.width ) ) {\n\t\t\tsize.width = parseInt( size.width, 10 ) / 100 * size.presentationWidth;\n\t\t}\n\n\t\t// Slide height may be a percentage of available height\n\t\tif( typeof size.height === 'string' && /%$/.test( size.height ) ) {\n\t\t\tsize.height = parseInt( size.height, 10 ) / 100 * size.presentationHeight;\n\t\t}\n\n\t\treturn size;\n\n\t}\n\n\t/**\n\t * Stores the vertical index of a stack so that the same\n\t * vertical slide can be selected when navigating to and\n\t * from the stack.\n\t *\n\t * @param {HTMLElement} stack The vertical stack element\n\t * @param {string|number} [v=0] Index to memorize\n\t */\n\tfunction setPreviousVerticalIndex( stack, v ) {\n\n\t\tif( typeof stack === 'object' && typeof stack.setAttribute === 'function' ) {\n\t\t\tstack.setAttribute( 'data-previous-indexv', v || 0 );\n\t\t}\n\n\t}\n\n\t/**\n\t * Retrieves the vertical index which was stored using\n\t * #setPreviousVerticalIndex() or 0 if no previous index\n\t * exists.\n\t *\n\t * @param {HTMLElement} stack The vertical stack element\n\t */\n\tfunction getPreviousVerticalIndex( stack ) {\n\n\t\tif( typeof stack === 'object' && typeof stack.setAttribute === 'function' && stack.classList.contains( 'stack' ) ) {\n\t\t\t// Prefer manually defined start-indexv\n\t\t\tconst attributeName = stack.hasAttribute( 'data-start-indexv' ) ? 'data-start-indexv' : 'data-previous-indexv';\n\n\t\t\treturn parseInt( stack.getAttribute( attributeName ) || 0, 10 );\n\t\t}\n\n\t\treturn 0;\n\n\t}\n\n\t/**\n\t * Checks if the current or specified slide is vertical\n\t * (nested within another slide).\n\t *\n\t * @param {HTMLElement} [slide=currentSlide] The slide to check\n\t * orientation of\n\t * @return {Boolean}\n\t */\n\tfunction isVerticalSlide( slide = currentSlide ) {\n\n\t\treturn slide && slide.parentNode && !!slide.parentNode.nodeName.match( /section/i );\n\n\t}\n\n\t/**\n\t * Returns true if we're on the last slide in the current\n\t * vertical stack.\n\t */\n\tfunction isLastVerticalSlide() {\n\n\t\tif( currentSlide && isVerticalSlide( currentSlide ) ) {\n\t\t\t// Does this slide have a next sibling?\n\t\t\tif( currentSlide.nextElementSibling ) return false;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Returns true if we're currently on the first slide in\n\t * the presentation.\n\t */\n\tfunction isFirstSlide() {\n\n\t\treturn indexh === 0 && indexv === 0;\n\n\t}\n\n\t/**\n\t * Returns true if we're currently on the last slide in\n\t * the presenation. If the last slide is a stack, we only\n\t * consider this the last slide if it's at the end of the\n\t * stack.\n\t */\n\tfunction isLastSlide() {\n\n\t\tif( currentSlide ) {\n\t\t\t// Does this slide have a next sibling?\n\t\t\tif( currentSlide.nextElementSibling ) return false;\n\n\t\t\t// If it's vertical, does its parent have a next sibling?\n\t\t\tif( isVerticalSlide( currentSlide ) && currentSlide.parentNode.nextElementSibling ) return false;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Enters the paused mode which fades everything on screen to\n\t * black.\n\t */\n\tfunction pause() {\n\n\t\tif( config.pause ) {\n\t\t\tconst wasPaused = dom.wrapper.classList.contains( 'paused' );\n\n\t\t\tcancelAutoSlide();\n\t\t\tdom.wrapper.classList.add( 'paused' );\n\n\t\t\tif( wasPaused === false ) {\n\t\t\t\tdispatchEvent({ type: 'paused' });\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Exits from the paused mode.\n\t */\n\tfunction resume() {\n\n\t\tconst wasPaused = dom.wrapper.classList.contains( 'paused' );\n\t\tdom.wrapper.classList.remove( 'paused' );\n\n\t\tcueAutoSlide();\n\n\t\tif( wasPaused ) {\n\t\t\tdispatchEvent({ type: 'resumed' });\n\t\t}\n\n\t}\n\n\t/**\n\t * Toggles the paused mode on and off.\n\t */\n\tfunction togglePause( override ) {\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? pause() : resume();\n\t\t}\n\t\telse {\n\t\t\tisPaused() ? resume() : pause();\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if we are currently in the paused mode.\n\t *\n\t * @return {Boolean}\n\t */\n\tfunction isPaused() {\n\n\t\treturn dom.wrapper.classList.contains( 'paused' );\n\n\t}\n\n\t/**\n\t * Toggles the auto slide mode on and off.\n\t *\n\t * @param {Boolean} [override] Flag which sets the desired state.\n\t * True means autoplay starts, false means it stops.\n\t */\n\n\tfunction toggleAutoSlide( override ) {\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? resumeAutoSlide() : pauseAutoSlide();\n\t\t}\n\n\t\telse {\n\t\t\tautoSlidePaused ? resumeAutoSlide() : pauseAutoSlide();\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if the auto slide mode is currently on.\n\t *\n\t * @return {Boolean}\n\t */\n\tfunction isAutoSliding() {\n\n\t\treturn !!( autoSlide && !autoSlidePaused );\n\n\t}\n\n\t/**\n\t * Steps from the current point in the presentation to the\n\t * slide which matches the specified horizontal and vertical\n\t * indices.\n\t *\n\t * @param {number} [h=indexh] Horizontal index of the target slide\n\t * @param {number} [v=indexv] Vertical index of the target slide\n\t * @param {number} [f] Index of a fragment within the\n\t * target slide to activate\n\t * @param {number} [origin] Origin for use in multimaster environments\n\t */\n\tfunction slide( h, v, f, origin ) {\n\n\t\t// Dispatch an event before hte slide\n\t\tconst slidechange = dispatchEvent({\n\t\t\ttype: 'beforeslidechange',\n\t\t\tdata: {\n\t\t\t\tindexh: h === undefined ? indexh : h,\n\t\t\t\tindexv: v === undefined ? indexv : v,\n\t\t\t\torigin\n\t\t\t}\n\t\t});\n\n\t\t// Abort if this slide change was prevented by an event listener\n\t\tif( slidechange.defaultPrevented ) return;\n\n\t\t// Remember where we were at before\n\t\tpreviousSlide = currentSlide;\n\n\t\t// Query all horizontal slides in the deck\n\t\tconst horizontalSlides = dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR );\n\n\t\t// Abort if there are no slides\n\t\tif( horizontalSlides.length === 0 ) return;\n\n\t\t// If no vertical index is specified and the upcoming slide is a\n\t\t// stack, resume at its previous vertical index\n\t\tif( v === undefined && !overview.isActive() ) {\n\t\t\tv = getPreviousVerticalIndex( horizontalSlides[ h ] );\n\t\t}\n\n\t\t// If we were on a vertical stack, remember what vertical index\n\t\t// it was on so we can resume at the same position when returning\n\t\tif( previousSlide && previousSlide.parentNode && previousSlide.parentNode.classList.contains( 'stack' ) ) {\n\t\t\tsetPreviousVerticalIndex( previousSlide.parentNode, indexv );\n\t\t}\n\n\t\t// Remember the state before this slide\n\t\tconst stateBefore = state.concat();\n\n\t\t// Reset the state array\n\t\tstate.length = 0;\n\n\t\tlet indexhBefore = indexh || 0,\n\t\t\tindexvBefore = indexv || 0;\n\n\t\t// Activate and transition to the new slide\n\t\tindexh = updateSlides( HORIZONTAL_SLIDES_SELECTOR, h === undefined ? indexh : h );\n\t\tindexv = updateSlides( VERTICAL_SLIDES_SELECTOR, v === undefined ? indexv : v );\n\n\t\t// Dispatch an event if the slide changed\n\t\tlet slideChanged = ( indexh !== indexhBefore || indexv !== indexvBefore );\n\n\t\t// Ensure that the previous slide is never the same as the current\n\t\tif( !slideChanged ) previousSlide = null;\n\n\t\t// Find the current horizontal slide and any possible vertical slides\n\t\t// within it\n\t\tlet currentHorizontalSlide = horizontalSlides[ indexh ],\n\t\t\tcurrentVerticalSlides = currentHorizontalSlide.querySelectorAll( 'section' );\n\n\t\t// Store references to the previous and current slides\n\t\tcurrentSlide = currentVerticalSlides[ indexv ] || currentHorizontalSlide;\n\n\t\tlet autoAnimateTransition = false;\n\n\t\t// Detect if we're moving between two auto-animated slides\n\t\tif( slideChanged && previousSlide && currentSlide && !overview.isActive() ) {\n\n\t\t\t// If this is an auto-animated transition, we disable the\n\t\t\t// regular slide transition\n\t\t\t//\n\t\t\t// Note 20-03-2020:\n\t\t\t// This needs to happen before we update slide visibility,\n\t\t\t// otherwise transitions will still run in Safari.\n\t\t\tif( previousSlide.hasAttribute( 'data-auto-animate' ) && currentSlide.hasAttribute( 'data-auto-animate' )\n\t\t\t\t\t&& previousSlide.getAttribute( 'data-auto-animate-id' ) === currentSlide.getAttribute( 'data-auto-animate-id' )\n\t\t\t\t\t&& !( ( indexh > indexhBefore || indexv > indexvBefore ) ? currentSlide : previousSlide ).hasAttribute( 'data-auto-animate-restart' ) ) {\n\n\t\t\t\tautoAnimateTransition = true;\n\t\t\t\tdom.slides.classList.add( 'disable-slide-transitions' );\n\t\t\t}\n\n\t\t\ttransition = 'running';\n\n\t\t}\n\n\t\t// Update the visibility of slides now that the indices have changed\n\t\tupdateSlidesVisibility();\n\n\t\tlayout();\n\n\t\t// Update the overview if it's currently active\n\t\tif( overview.isActive() ) {\n\t\t\toverview.update();\n\t\t}\n\n\t\t// Show fragment, if specified\n\t\tif( typeof f !== 'undefined' ) {\n\t\t\tfragments.goto( f );\n\t\t}\n\n\t\t// Solves an edge case where the previous slide maintains the\n\t\t// 'present' class when navigating between adjacent vertical\n\t\t// stacks\n\t\tif( previousSlide && previousSlide !== currentSlide ) {\n\t\t\tpreviousSlide.classList.remove( 'present' );\n\t\t\tpreviousSlide.setAttribute( 'aria-hidden', 'true' );\n\n\t\t\t// Reset all slides upon navigate to home\n\t\t\tif( isFirstSlide() ) {\n\t\t\t\t// Launch async task\n\t\t\t\tsetTimeout( () => {\n\t\t\t\t\tgetVerticalStacks().forEach( slide => {\n\t\t\t\t\t\tsetPreviousVerticalIndex( slide, 0 );\n\t\t\t\t\t} );\n\t\t\t\t}, 0 );\n\t\t\t}\n\t\t}\n\n\t\t// Apply the new state\n\t\tstateLoop: for( let i = 0, len = state.length; i < len; i++ ) {\n\t\t\t// Check if this state existed on the previous slide. If it\n\t\t\t// did, we will avoid adding it repeatedly\n\t\t\tfor( let j = 0; j < stateBefore.length; j++ ) {\n\t\t\t\tif( stateBefore[j] === state[i] ) {\n\t\t\t\t\tstateBefore.splice( j, 1 );\n\t\t\t\t\tcontinue stateLoop;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdom.viewport.classList.add( state[i] );\n\n\t\t\t// Dispatch custom event matching the state's name\n\t\t\tdispatchEvent({ type: state[i] });\n\t\t}\n\n\t\t// Clean up the remains of the previous state\n\t\twhile( stateBefore.length ) {\n\t\t\tdom.viewport.classList.remove( stateBefore.pop() );\n\t\t}\n\n\t\tif( slideChanged ) {\n\t\t\tdispatchEvent({\n\t\t\t\ttype: 'slidechanged',\n\t\t\t\tdata: {\n\t\t\t\t\tindexh,\n\t\t\t\t\tindexv,\n\t\t\t\t\tpreviousSlide,\n\t\t\t\t\tcurrentSlide,\n\t\t\t\t\torigin\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Handle embedded content\n\t\tif( slideChanged || !previousSlide ) {\n\t\t\tslideContent.stopEmbeddedContent( previousSlide );\n\t\t\tslideContent.startEmbeddedContent( currentSlide );\n\t\t}\n\n\t\t// Announce the current slide contents to screen readers\n\t\t// Use animation frame to prevent getComputedStyle in getStatusText\n\t\t// from triggering layout mid-frame\n\t\trequestAnimationFrame( () => {\n\t\t\tannounceStatus( getStatusText( currentSlide ) );\n\t\t});\n\n\t\tprogress.update();\n\t\tcontrols.update();\n\t\tnotes.update();\n\t\tbackgrounds.update();\n\t\tbackgrounds.updateParallax();\n\t\tslideNumber.update();\n\t\tfragments.update();\n\n\t\t// Update the URL hash\n\t\tlocation.writeURL();\n\n\t\tcueAutoSlide();\n\n\t\t// Auto-animation\n\t\tif( autoAnimateTransition ) {\n\n\t\t\tsetTimeout( () => {\n\t\t\t\tdom.slides.classList.remove( 'disable-slide-transitions' );\n\t\t\t}, 0 );\n\n\t\t\tif( config.autoAnimate ) {\n\t\t\t\t// Run the auto-animation between our slides\n\t\t\t\tautoAnimate.run( previousSlide, currentSlide );\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Syncs the presentation with the current DOM. Useful\n\t * when new slides or control elements are added or when\n\t * the configuration has changed.\n\t */\n\tfunction sync() {\n\n\t\t// Subscribe to input\n\t\tremoveEventListeners();\n\t\taddEventListeners();\n\n\t\t// Force a layout to make sure the current config is accounted for\n\t\tlayout();\n\n\t\t// Reflect the current autoSlide value\n\t\tautoSlide = config.autoSlide;\n\n\t\t// Start auto-sliding if it's enabled\n\t\tcueAutoSlide();\n\n\t\t// Re-create all slide backgrounds\n\t\tbackgrounds.create();\n\n\t\t// Write the current hash to the URL\n\t\tlocation.writeURL();\n\n\t\tfragments.sortAll();\n\n\t\tcontrols.update();\n\t\tprogress.update();\n\n\t\tupdateSlidesVisibility();\n\n\t\tnotes.update();\n\t\tnotes.updateVisibility();\n\t\tbackgrounds.update( true );\n\t\tslideNumber.update();\n\t\tslideContent.formatEmbeddedContent();\n\n\t\t// Start or stop embedded content depending on global config\n\t\tif( config.autoPlayMedia === false ) {\n\t\t\tslideContent.stopEmbeddedContent( currentSlide, { unloadIframes: false } );\n\t\t}\n\t\telse {\n\t\t\tslideContent.startEmbeddedContent( currentSlide );\n\t\t}\n\n\t\tif( overview.isActive() ) {\n\t\t\toverview.layout();\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates reveal.js to keep in sync with new slide attributes. For\n\t * example, if you add a new `data-background-image` you can call\n\t * this to have reveal.js render the new background image.\n\t *\n\t * Similar to #sync() but more efficient when you only need to\n\t * refresh a specific slide.\n\t *\n\t * @param {HTMLElement} slide\n\t */\n\tfunction syncSlide( slide = currentSlide ) {\n\n\t\tbackgrounds.sync( slide );\n\t\tfragments.sync( slide );\n\n\t\tslideContent.load( slide );\n\n\t\tbackgrounds.update();\n\t\tnotes.update();\n\n\t}\n\n\t/**\n\t * Resets all vertical slides so that only the first\n\t * is visible.\n\t */\n\tfunction resetVerticalSlides() {\n\n\t\tgetHorizontalSlides().forEach( horizontalSlide => {\n\n\t\t\tUtil.queryAll( horizontalSlide, 'section' ).forEach( ( verticalSlide, y ) => {\n\n\t\t\t\tif( y > 0 ) {\n\t\t\t\t\tverticalSlide.classList.remove( 'present' );\n\t\t\t\t\tverticalSlide.classList.remove( 'past' );\n\t\t\t\t\tverticalSlide.classList.add( 'future' );\n\t\t\t\t\tverticalSlide.setAttribute( 'aria-hidden', 'true' );\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Randomly shuffles all slides in the deck.\n\t */\n\tfunction shuffle( slides = getHorizontalSlides() ) {\n\n\t\tslides.forEach( ( slide, i ) => {\n\n\t\t\t// Insert the slide next to a randomly picked sibling slide\n\t\t\t// slide. This may cause the slide to insert before itself,\n\t\t\t// but that's not an issue.\n\t\t\tlet beforeSlide = slides[ Math.floor( Math.random() * slides.length ) ];\n\t\t\tif( beforeSlide.parentNode === slide.parentNode ) {\n\t\t\t\tslide.parentNode.insertBefore( slide, beforeSlide );\n\t\t\t}\n\n\t\t\t// Randomize the order of vertical slides (if there are any)\n\t\t\tlet verticalSlides = slide.querySelectorAll( 'section' );\n\t\t\tif( verticalSlides.length ) {\n\t\t\t\tshuffle( verticalSlides );\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Updates one dimension of slides by showing the slide\n\t * with the specified index.\n\t *\n\t * @param {string} selector A CSS selector that will fetch\n\t * the group of slides we are working with\n\t * @param {number} index The index of the slide that should be\n\t * shown\n\t *\n\t * @return {number} The index of the slide that is now shown,\n\t * might differ from the passed in index if it was out of\n\t * bounds.\n\t */\n\tfunction updateSlides( selector, index ) {\n\n\t\t// Select all slides and convert the NodeList result to\n\t\t// an array\n\t\tlet slides = Util.queryAll( dom.wrapper, selector ),\n\t\t\tslidesLength = slides.length;\n\n\t\tlet printMode = print.isPrintingPDF();\n\n\t\tif( slidesLength ) {\n\n\t\t\t// Should the index loop?\n\t\t\tif( config.loop ) {\n\t\t\t\tindex %= slidesLength;\n\n\t\t\t\tif( index < 0 ) {\n\t\t\t\t\tindex = slidesLength + index;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Enforce max and minimum index bounds\n\t\t\tindex = Math.max( Math.min( index, slidesLength - 1 ), 0 );\n\n\t\t\tfor( let i = 0; i < slidesLength; i++ ) {\n\t\t\t\tlet element = slides[i];\n\n\t\t\t\tlet reverse = config.rtl && !isVerticalSlide( element );\n\n\t\t\t\t// Avoid .remove() with multiple args for IE11 support\n\t\t\t\telement.classList.remove( 'past' );\n\t\t\t\telement.classList.remove( 'present' );\n\t\t\t\telement.classList.remove( 'future' );\n\n\t\t\t\t// http://www.w3.org/html/wg/drafts/html/master/editing.html#the-hidden-attribute\n\t\t\t\telement.setAttribute( 'hidden', '' );\n\t\t\t\telement.setAttribute( 'aria-hidden', 'true' );\n\n\t\t\t\t// If this element contains vertical slides\n\t\t\t\tif( element.querySelector( 'section' ) ) {\n\t\t\t\t\telement.classList.add( 'stack' );\n\t\t\t\t}\n\n\t\t\t\t// If we're printing static slides, all slides are \"present\"\n\t\t\t\tif( printMode ) {\n\t\t\t\t\telement.classList.add( 'present' );\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif( i < index ) {\n\t\t\t\t\t// Any element previous to index is given the 'past' class\n\t\t\t\t\telement.classList.add( reverse ? 'future' : 'past' );\n\n\t\t\t\t\tif( config.fragments ) {\n\t\t\t\t\t\t// Show all fragments in prior slides\n\t\t\t\t\t\tUtil.queryAll( element, '.fragment' ).forEach( fragment => {\n\t\t\t\t\t\t\tfragment.classList.add( 'visible' );\n\t\t\t\t\t\t\tfragment.classList.remove( 'current-fragment' );\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( i > index ) {\n\t\t\t\t\t// Any element subsequent to index is given the 'future' class\n\t\t\t\t\telement.classList.add( reverse ? 'past' : 'future' );\n\n\t\t\t\t\tif( config.fragments ) {\n\t\t\t\t\t\t// Hide all fragments in future slides\n\t\t\t\t\t\tUtil.queryAll( element, '.fragment.visible' ).forEach( fragment => {\n\t\t\t\t\t\t\tfragment.classList.remove( 'visible', 'current-fragment' );\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet slide = slides[index];\n\t\t\tlet wasPresent = slide.classList.contains( 'present' );\n\n\t\t\t// Mark the current slide as present\n\t\t\tslide.classList.add( 'present' );\n\t\t\tslide.removeAttribute( 'hidden' );\n\t\t\tslide.removeAttribute( 'aria-hidden' );\n\n\t\t\tif( !wasPresent ) {\n\t\t\t\t// Dispatch an event indicating the slide is now visible\n\t\t\t\tdispatchEvent({\n\t\t\t\t\ttarget: slide,\n\t\t\t\t\ttype: 'visible',\n\t\t\t\t\tbubbles: false\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// If this slide has a state associated with it, add it\n\t\t\t// onto the current state of the deck\n\t\t\tlet slideState = slide.getAttribute( 'data-state' );\n\t\t\tif( slideState ) {\n\t\t\t\tstate = state.concat( slideState.split( ' ' ) );\n\t\t\t}\n\n\t\t}\n\t\telse {\n\t\t\t// Since there are no slides we can't be anywhere beyond the\n\t\t\t// zeroth index\n\t\t\tindex = 0;\n\t\t}\n\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Optimization method; hide all slides that are far away\n\t * from the present slide.\n\t */\n\tfunction updateSlidesVisibility() {\n\n\t\t// Select all slides and convert the NodeList result to\n\t\t// an array\n\t\tlet horizontalSlides = getHorizontalSlides(),\n\t\t\thorizontalSlidesLength = horizontalSlides.length,\n\t\t\tdistanceX,\n\t\t\tdistanceY;\n\n\t\tif( horizontalSlidesLength && typeof indexh !== 'undefined' ) {\n\n\t\t\t// The number of steps away from the present slide that will\n\t\t\t// be visible\n\t\t\tlet viewDistance = overview.isActive() ? 10 : config.viewDistance;\n\n\t\t\t// Shorten the view distance on devices that typically have\n\t\t\t// less resources\n\t\t\tif( Device.isMobile ) {\n\t\t\t\tviewDistance = overview.isActive() ? 6 : config.mobileViewDistance;\n\t\t\t}\n\n\t\t\t// All slides need to be visible when exporting to PDF\n\t\t\tif( print.isPrintingPDF() ) {\n\t\t\t\tviewDistance = Number.MAX_VALUE;\n\t\t\t}\n\n\t\t\tfor( let x = 0; x < horizontalSlidesLength; x++ ) {\n\t\t\t\tlet horizontalSlide = horizontalSlides[x];\n\n\t\t\t\tlet verticalSlides = Util.queryAll( horizontalSlide, 'section' ),\n\t\t\t\t\tverticalSlidesLength = verticalSlides.length;\n\n\t\t\t\t// Determine how far away this slide is from the present\n\t\t\t\tdistanceX = Math.abs( ( indexh || 0 ) - x ) || 0;\n\n\t\t\t\t// If the presentation is looped, distance should measure\n\t\t\t\t// 1 between the first and last slides\n\t\t\t\tif( config.loop ) {\n\t\t\t\t\tdistanceX = Math.abs( ( ( indexh || 0 ) - x ) % ( horizontalSlidesLength - viewDistance ) ) || 0;\n\t\t\t\t}\n\n\t\t\t\t// Show the horizontal slide if it's within the view distance\n\t\t\t\tif( distanceX < viewDistance ) {\n\t\t\t\t\tslideContent.load( horizontalSlide );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tslideContent.unload( horizontalSlide );\n\t\t\t\t}\n\n\t\t\t\tif( verticalSlidesLength ) {\n\n\t\t\t\t\tlet oy = getPreviousVerticalIndex( horizontalSlide );\n\n\t\t\t\t\tfor( let y = 0; y < verticalSlidesLength; y++ ) {\n\t\t\t\t\t\tlet verticalSlide = verticalSlides[y];\n\n\t\t\t\t\t\tdistanceY = x === ( indexh || 0 ) ? Math.abs( ( indexv || 0 ) - y ) : Math.abs( y - oy );\n\n\t\t\t\t\t\tif( distanceX + distanceY < viewDistance ) {\n\t\t\t\t\t\t\tslideContent.load( verticalSlide );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tslideContent.unload( verticalSlide );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flag if there are ANY vertical slides, anywhere in the deck\n\t\t\tif( hasVerticalSlides() ) {\n\t\t\t\tdom.wrapper.classList.add( 'has-vertical-slides' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdom.wrapper.classList.remove( 'has-vertical-slides' );\n\t\t\t}\n\n\t\t\t// Flag if there are ANY horizontal slides, anywhere in the deck\n\t\t\tif( hasHorizontalSlides() ) {\n\t\t\t\tdom.wrapper.classList.add( 'has-horizontal-slides' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdom.wrapper.classList.remove( 'has-horizontal-slides' );\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Determine what available routes there are for navigation.\n\t *\n\t * @return {{left: boolean, right: boolean, up: boolean, down: boolean}}\n\t */\n\tfunction availableRoutes({ includeFragments = false } = {}) {\n\n\t\tlet horizontalSlides = dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ),\n\t\t\tverticalSlides = dom.wrapper.querySelectorAll( VERTICAL_SLIDES_SELECTOR );\n\n\t\tlet routes = {\n\t\t\tleft: indexh > 0,\n\t\t\tright: indexh < horizontalSlides.length - 1,\n\t\t\tup: indexv > 0,\n\t\t\tdown: indexv < verticalSlides.length - 1\n\t\t};\n\n\t\t// Looped presentations can always be navigated as long as\n\t\t// there are slides available\n\t\tif( config.loop ) {\n\t\t\tif( horizontalSlides.length > 1 ) {\n\t\t\t\troutes.left = true;\n\t\t\t\troutes.right = true;\n\t\t\t}\n\n\t\t\tif( verticalSlides.length > 1 ) {\n\t\t\t\troutes.up = true;\n\t\t\t\troutes.down = true;\n\t\t\t}\n\t\t}\n\n\t\tif ( horizontalSlides.length > 1 && config.navigationMode === 'linear' ) {\n\t\t\troutes.right = routes.right || routes.down;\n\t\t\troutes.left = routes.left || routes.up;\n\t\t}\n\n\t\t// If includeFragments is set, a route will be considered\n\t\t// availalbe if either a slid OR fragment is available in\n\t\t// the given direction\n\t\tif( includeFragments === true ) {\n\t\t\tlet fragmentRoutes = fragments.availableRoutes();\n\t\t\troutes.left = routes.left || fragmentRoutes.prev;\n\t\t\troutes.up = routes.up || fragmentRoutes.prev;\n\t\t\troutes.down = routes.down || fragmentRoutes.next;\n\t\t\troutes.right = routes.right || fragmentRoutes.next;\n\t\t}\n\n\t\t// Reverse horizontal controls for rtl\n\t\tif( config.rtl ) {\n\t\t\tlet left = routes.left;\n\t\t\troutes.left = routes.right;\n\t\t\troutes.right = left;\n\t\t}\n\n\t\treturn routes;\n\n\t}\n\n\t/**\n\t * Returns the number of past slides. This can be used as a global\n\t * flattened index for slides.\n\t *\n\t * @param {HTMLElement} [slide=currentSlide] The slide we're counting before\n\t *\n\t * @return {number} Past slide count\n\t */\n\tfunction getSlidePastCount( slide = currentSlide ) {\n\n\t\tlet horizontalSlides = getHorizontalSlides();\n\n\t\t// The number of past slides\n\t\tlet pastCount = 0;\n\n\t\t// Step through all slides and count the past ones\n\t\tmainLoop: for( let i = 0; i < horizontalSlides.length; i++ ) {\n\n\t\t\tlet horizontalSlide = horizontalSlides[i];\n\t\t\tlet verticalSlides = horizontalSlide.querySelectorAll( 'section' );\n\n\t\t\tfor( let j = 0; j < verticalSlides.length; j++ ) {\n\n\t\t\t\t// Stop as soon as we arrive at the present\n\t\t\t\tif( verticalSlides[j] === slide ) {\n\t\t\t\t\tbreak mainLoop;\n\t\t\t\t}\n\n\t\t\t\t// Don't count slides with the \"uncounted\" class\n\t\t\t\tif( verticalSlides[j].dataset.visibility !== 'uncounted' ) {\n\t\t\t\t\tpastCount++;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Stop as soon as we arrive at the present\n\t\t\tif( horizontalSlide === slide ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Don't count the wrapping section for vertical slides and\n\t\t\t// slides marked as uncounted\n\t\t\tif( horizontalSlide.classList.contains( 'stack' ) === false && horizontalSlide.dataset.visibility !== 'uncounted' ) {\n\t\t\t\tpastCount++;\n\t\t\t}\n\n\t\t}\n\n\t\treturn pastCount;\n\n\t}\n\n\t/**\n\t * Returns a value ranging from 0-1 that represents\n\t * how far into the presentation we have navigated.\n\t *\n\t * @return {number}\n\t */\n\tfunction getProgress() {\n\n\t\t// The number of past and total slides\n\t\tlet totalCount = getTotalSlides();\n\t\tlet pastCount = getSlidePastCount();\n\n\t\tif( currentSlide ) {\n\n\t\t\tlet allFragments = currentSlide.querySelectorAll( '.fragment' );\n\n\t\t\t// If there are fragments in the current slide those should be\n\t\t\t// accounted for in the progress.\n\t\t\tif( allFragments.length > 0 ) {\n\t\t\t\tlet visibleFragments = currentSlide.querySelectorAll( '.fragment.visible' );\n\n\t\t\t\t// This value represents how big a portion of the slide progress\n\t\t\t\t// that is made up by its fragments (0-1)\n\t\t\t\tlet fragmentWeight = 0.9;\n\n\t\t\t\t// Add fragment progress to the past slide count\n\t\t\t\tpastCount += ( visibleFragments.length / allFragments.length ) * fragmentWeight;\n\t\t\t}\n\n\t\t}\n\n\t\treturn Math.min( pastCount / ( totalCount - 1 ), 1 );\n\n\t}\n\n\t/**\n\t * Retrieves the h/v location and fragment of the current,\n\t * or specified, slide.\n\t *\n\t * @param {HTMLElement} [slide] If specified, the returned\n\t * index will be for this slide rather than the currently\n\t * active one\n\t *\n\t * @return {{h: number, v: number, f: number}}\n\t */\n\tfunction getIndices( slide ) {\n\n\t\t// By default, return the current indices\n\t\tlet h = indexh,\n\t\t\tv = indexv,\n\t\t\tf;\n\n\t\t// If a slide is specified, return the indices of that slide\n\t\tif( slide ) {\n\t\t\tlet isVertical = isVerticalSlide( slide );\n\t\t\tlet slideh = isVertical ? slide.parentNode : slide;\n\n\t\t\t// Select all horizontal slides\n\t\t\tlet horizontalSlides = getHorizontalSlides();\n\n\t\t\t// Now that we know which the horizontal slide is, get its index\n\t\t\th = Math.max( horizontalSlides.indexOf( slideh ), 0 );\n\n\t\t\t// Assume we're not vertical\n\t\t\tv = undefined;\n\n\t\t\t// If this is a vertical slide, grab the vertical index\n\t\t\tif( isVertical ) {\n\t\t\t\tv = Math.max( Util.queryAll( slide.parentNode, 'section' ).indexOf( slide ), 0 );\n\t\t\t}\n\t\t}\n\n\t\tif( !slide && currentSlide ) {\n\t\t\tlet hasFragments = currentSlide.querySelectorAll( '.fragment' ).length > 0;\n\t\t\tif( hasFragments ) {\n\t\t\t\tlet currentFragment = currentSlide.querySelector( '.current-fragment' );\n\t\t\t\tif( currentFragment && currentFragment.hasAttribute( 'data-fragment-index' ) ) {\n\t\t\t\t\tf = parseInt( currentFragment.getAttribute( 'data-fragment-index' ), 10 );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tf = currentSlide.querySelectorAll( '.fragment.visible' ).length - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { h, v, f };\n\n\t}\n\n\t/**\n\t * Retrieves all slides in this presentation.\n\t */\n\tfunction getSlides() {\n\n\t\treturn Util.queryAll( dom.wrapper, SLIDES_SELECTOR + ':not(.stack):not([data-visibility=\"uncounted\"])' );\n\n\t}\n\n\t/**\n\t * Returns a list of all horizontal slides in the deck. Each\n\t * vertical stack is included as one horizontal slide in the\n\t * resulting array.\n\t */\n\tfunction getHorizontalSlides() {\n\n\t\treturn Util.queryAll( dom.wrapper, HORIZONTAL_SLIDES_SELECTOR );\n\n\t}\n\n\t/**\n\t * Returns all vertical slides that exist within this deck.\n\t */\n\tfunction getVerticalSlides() {\n\n\t\treturn Util.queryAll( dom.wrapper, '.slides>section>section' );\n\n\t}\n\n\t/**\n\t * Returns all vertical stacks (each stack can contain multiple slides).\n\t */\n\tfunction getVerticalStacks() {\n\n\t\treturn Util.queryAll( dom.wrapper, HORIZONTAL_SLIDES_SELECTOR + '.stack');\n\n\t}\n\n\t/**\n\t * Returns true if there are at least two horizontal slides.\n\t */\n\tfunction hasHorizontalSlides() {\n\n\t\treturn getHorizontalSlides().length > 1;\n\t}\n\n\t/**\n\t * Returns true if there are at least two vertical slides.\n\t */\n\tfunction hasVerticalSlides() {\n\n\t\treturn getVerticalSlides().length > 1;\n\n\t}\n\n\t/**\n\t * Returns an array of objects where each object represents the\n\t * attributes on its respective slide.\n\t */\n\tfunction getSlidesAttributes() {\n\n\t\treturn getSlides().map( slide => {\n\n\t\t\tlet attributes = {};\n\t\t\tfor( let i = 0; i < slide.attributes.length; i++ ) {\n\t\t\t\tlet attribute = slide.attributes[ i ];\n\t\t\t\tattributes[ attribute.name ] = attribute.value;\n\t\t\t}\n\t\t\treturn attributes;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Retrieves the total number of slides in this presentation.\n\t *\n\t * @return {number}\n\t */\n\tfunction getTotalSlides() {\n\n\t\treturn getSlides().length;\n\n\t}\n\n\t/**\n\t * Returns the slide element matching the specified index.\n\t *\n\t * @return {HTMLElement}\n\t */\n\tfunction getSlide( x, y ) {\n\n\t\tlet horizontalSlide = getHorizontalSlides()[ x ];\n\t\tlet verticalSlides = horizontalSlide && horizontalSlide.querySelectorAll( 'section' );\n\n\t\tif( verticalSlides && verticalSlides.length && typeof y === 'number' ) {\n\t\t\treturn verticalSlides ? verticalSlides[ y ] : undefined;\n\t\t}\n\n\t\treturn horizontalSlide;\n\n\t}\n\n\t/**\n\t * Returns the background element for the given slide.\n\t * All slides, even the ones with no background properties\n\t * defined, have a background element so as long as the\n\t * index is valid an element will be returned.\n\t *\n\t * @param {mixed} x Horizontal background index OR a slide\n\t * HTML element\n\t * @param {number} y Vertical background index\n\t * @return {(HTMLElement[]|*)}\n\t */\n\tfunction getSlideBackground( x, y ) {\n\n\t\tlet slide = typeof x === 'number' ? getSlide( x, y ) : x;\n\t\tif( slide ) {\n\t\t\treturn slide.slideBackgroundElement;\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\t/**\n\t * Retrieves the current state of the presentation as\n\t * an object. This state can then be restored at any\n\t * time.\n\t *\n\t * @return {{indexh: number, indexv: number, indexf: number, paused: boolean, overview: boolean}}\n\t */\n\tfunction getState() {\n\n\t\tlet indices = getIndices();\n\n\t\treturn {\n\t\t\tindexh: indices.h,\n\t\t\tindexv: indices.v,\n\t\t\tindexf: indices.f,\n\t\t\tpaused: isPaused(),\n\t\t\toverview: overview.isActive()\n\t\t};\n\n\t}\n\n\t/**\n\t * Restores the presentation to the given state.\n\t *\n\t * @param {object} state As generated by getState()\n\t * @see {@link getState} generates the parameter `state`\n\t */\n\tfunction setState( state ) {\n\n\t\tif( typeof state === 'object' ) {\n\t\t\tslide( Util.deserialize( state.indexh ), Util.deserialize( state.indexv ), Util.deserialize( state.indexf ) );\n\n\t\t\tlet pausedFlag = Util.deserialize( state.paused ),\n\t\t\t\toverviewFlag = Util.deserialize( state.overview );\n\n\t\t\tif( typeof pausedFlag === 'boolean' && pausedFlag !== isPaused() ) {\n\t\t\t\ttogglePause( pausedFlag );\n\t\t\t}\n\n\t\t\tif( typeof overviewFlag === 'boolean' && overviewFlag !== overview.isActive() ) {\n\t\t\t\toverview.toggle( overviewFlag );\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Cues a new automated slide if enabled in the config.\n\t */\n\tfunction cueAutoSlide() {\n\n\t\tcancelAutoSlide();\n\n\t\tif( currentSlide && config.autoSlide !== false ) {\n\n\t\t\tlet fragment = currentSlide.querySelector( '.current-fragment' );\n\n\t\t\t// When the slide first appears there is no \"current\" fragment so\n\t\t\t// we look for a data-autoslide timing on the first fragment\n\t\t\tif( !fragment ) fragment = currentSlide.querySelector( '.fragment' );\n\n\t\t\tlet fragmentAutoSlide = fragment ? fragment.getAttribute( 'data-autoslide' ) : null;\n\t\t\tlet parentAutoSlide = currentSlide.parentNode ? currentSlide.parentNode.getAttribute( 'data-autoslide' ) : null;\n\t\t\tlet slideAutoSlide = currentSlide.getAttribute( 'data-autoslide' );\n\n\t\t\t// Pick value in the following priority order:\n\t\t\t// 1. Current fragment's data-autoslide\n\t\t\t// 2. Current slide's data-autoslide\n\t\t\t// 3. Parent slide's data-autoslide\n\t\t\t// 4. Global autoSlide setting\n\t\t\tif( fragmentAutoSlide ) {\n\t\t\t\tautoSlide = parseInt( fragmentAutoSlide, 10 );\n\t\t\t}\n\t\t\telse if( slideAutoSlide ) {\n\t\t\t\tautoSlide = parseInt( slideAutoSlide, 10 );\n\t\t\t}\n\t\t\telse if( parentAutoSlide ) {\n\t\t\t\tautoSlide = parseInt( parentAutoSlide, 10 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tautoSlide = config.autoSlide;\n\n\t\t\t\t// If there are media elements with data-autoplay,\n\t\t\t\t// automatically set the autoSlide duration to the\n\t\t\t\t// length of that media. Not applicable if the slide\n\t\t\t\t// is divided up into fragments.\n\t\t\t\t// playbackRate is accounted for in the duration.\n\t\t\t\tif( currentSlide.querySelectorAll( '.fragment' ).length === 0 ) {\n\t\t\t\t\tUtil.queryAll( currentSlide, 'video, audio' ).forEach( el => {\n\t\t\t\t\t\tif( el.hasAttribute( 'data-autoplay' ) ) {\n\t\t\t\t\t\t\tif( autoSlide && (el.duration * 1000 / el.playbackRate ) > autoSlide ) {\n\t\t\t\t\t\t\t\tautoSlide = ( el.duration * 1000 / el.playbackRate ) + 1000;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Cue the next auto-slide if:\n\t\t\t// - There is an autoSlide value\n\t\t\t// - Auto-sliding isn't paused by the user\n\t\t\t// - The presentation isn't paused\n\t\t\t// - The overview isn't active\n\t\t\t// - The presentation isn't over\n\t\t\tif( autoSlide && !autoSlidePaused && !isPaused() && !overview.isActive() && ( !isLastSlide() || fragments.availableRoutes().next || config.loop === true ) ) {\n\t\t\t\tautoSlideTimeout = setTimeout( () => {\n\t\t\t\t\tif( typeof config.autoSlideMethod === 'function' ) {\n\t\t\t\t\t\tconfig.autoSlideMethod()\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tnavigateNext();\n\t\t\t\t\t}\n\t\t\t\t\tcueAutoSlide();\n\t\t\t\t}, autoSlide );\n\t\t\t\tautoSlideStartTime = Date.now();\n\t\t\t}\n\n\t\t\tif( autoSlidePlayer ) {\n\t\t\t\tautoSlidePlayer.setPlaying( autoSlideTimeout !== -1 );\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Cancels any ongoing request to auto-slide.\n\t */\n\tfunction cancelAutoSlide() {\n\n\t\tclearTimeout( autoSlideTimeout );\n\t\tautoSlideTimeout = -1;\n\n\t}\n\n\tfunction pauseAutoSlide() {\n\n\t\tif( autoSlide && !autoSlidePaused ) {\n\t\t\tautoSlidePaused = true;\n\t\t\tdispatchEvent({ type: 'autoslidepaused' });\n\t\t\tclearTimeout( autoSlideTimeout );\n\n\t\t\tif( autoSlidePlayer ) {\n\t\t\t\tautoSlidePlayer.setPlaying( false );\n\t\t\t}\n\t\t}\n\n\t}\n\n\tfunction resumeAutoSlide() {\n\n\t\tif( autoSlide && autoSlidePaused ) {\n\t\t\tautoSlidePaused = false;\n\t\t\tdispatchEvent({ type: 'autoslideresumed' });\n\t\t\tcueAutoSlide();\n\t\t}\n\n\t}\n\n\tfunction navigateLeft({skipFragments=false}={}) {\n\n\t\tnavigationHistory.hasNavigatedHorizontally = true;\n\n\t\t// Reverse for RTL\n\t\tif( config.rtl ) {\n\t\t\tif( ( overview.isActive() || skipFragments || fragments.next() === false ) && availableRoutes().left ) {\n\t\t\t\tslide( indexh + 1, config.navigationMode === 'grid' ? indexv : undefined );\n\t\t\t}\n\t\t}\n\t\t// Normal navigation\n\t\telse if( ( overview.isActive() || skipFragments || fragments.prev() === false ) && availableRoutes().left ) {\n\t\t\tslide( indexh - 1, config.navigationMode === 'grid' ? indexv : undefined );\n\t\t}\n\n\t}\n\n\tfunction navigateRight({skipFragments=false}={}) {\n\n\t\tnavigationHistory.hasNavigatedHorizontally = true;\n\n\t\t// Reverse for RTL\n\t\tif( config.rtl ) {\n\t\t\tif( ( overview.isActive() || skipFragments || fragments.prev() === false ) && availableRoutes().right ) {\n\t\t\t\tslide( indexh - 1, config.navigationMode === 'grid' ? indexv : undefined );\n\t\t\t}\n\t\t}\n\t\t// Normal navigation\n\t\telse if( ( overview.isActive() || skipFragments || fragments.next() === false ) && availableRoutes().right ) {\n\t\t\tslide( indexh + 1, config.navigationMode === 'grid' ? indexv : undefined );\n\t\t}\n\n\t}\n\n\tfunction navigateUp({skipFragments=false}={}) {\n\n\t\t// Prioritize hiding fragments\n\t\tif( ( overview.isActive() || skipFragments || fragments.prev() === false ) && availableRoutes().up ) {\n\t\t\tslide( indexh, indexv - 1 );\n\t\t}\n\n\t}\n\n\tfunction navigateDown({skipFragments=false}={}) {\n\n\t\tnavigationHistory.hasNavigatedVertically = true;\n\n\t\t// Prioritize revealing fragments\n\t\tif( ( overview.isActive() || skipFragments || fragments.next() === false ) && availableRoutes().down ) {\n\t\t\tslide( indexh, indexv + 1 );\n\t\t}\n\n\t}\n\n\t/**\n\t * Navigates backwards, prioritized in the following order:\n\t * 1) Previous fragment\n\t * 2) Previous vertical slide\n\t * 3) Previous horizontal slide\n\t */\n\tfunction navigatePrev({skipFragments=false}={}) {\n\n\t\t// Prioritize revealing fragments\n\t\tif( skipFragments || fragments.prev() === false ) {\n\t\t\tif( availableRoutes().up ) {\n\t\t\t\tnavigateUp({skipFragments});\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Fetch the previous horizontal slide, if there is one\n\t\t\t\tlet previousSlide;\n\n\t\t\t\tif( config.rtl ) {\n\t\t\t\t\tpreviousSlide = Util.queryAll( dom.wrapper, HORIZONTAL_SLIDES_SELECTOR + '.future' ).pop();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tpreviousSlide = Util.queryAll( dom.wrapper, HORIZONTAL_SLIDES_SELECTOR + '.past' ).pop();\n\t\t\t\t}\n\n\t\t\t\t// When going backwards and arriving on a stack we start\n\t\t\t\t// at the bottom of the stack\n\t\t\t\tif( previousSlide && previousSlide.classList.contains( 'stack' ) ) {\n\t\t\t\t\tlet v = ( previousSlide.querySelectorAll( 'section' ).length - 1 ) || undefined;\n\t\t\t\t\tlet h = indexh - 1;\n\t\t\t\t\tslide( h, v );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnavigateLeft({skipFragments});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * The reverse of #navigatePrev().\n\t */\n\tfunction navigateNext({skipFragments=false}={}) {\n\n\t\tnavigationHistory.hasNavigatedHorizontally = true;\n\t\tnavigationHistory.hasNavigatedVertically = true;\n\n\t\t// Prioritize revealing fragments\n\t\tif( skipFragments || fragments.next() === false ) {\n\n\t\t\tlet routes = availableRoutes();\n\n\t\t\t// When looping is enabled `routes.down` is always available\n\t\t\t// so we need a separate check for when we've reached the\n\t\t\t// end of a stack and should move horizontally\n\t\t\tif( routes.down && routes.right && config.loop && isLastVerticalSlide() ) {\n\t\t\t\troutes.down = false;\n\t\t\t}\n\n\t\t\tif( routes.down ) {\n\t\t\t\tnavigateDown({skipFragments});\n\t\t\t}\n\t\t\telse if( config.rtl ) {\n\t\t\t\tnavigateLeft({skipFragments});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnavigateRight({skipFragments});\n\t\t\t}\n\t\t}\n\n\t}\n\n\n\t// --------------------------------------------------------------------//\n\t// ----------------------------- EVENTS -------------------------------//\n\t// --------------------------------------------------------------------//\n\n\t/**\n\t * Called by all event handlers that are based on user\n\t * input.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onUserInput( event ) {\n\n\t\tif( config.autoSlideStoppable ) {\n\t\t\tpauseAutoSlide();\n\t\t}\n\n\t}\n\n\t/**\n\t * Event listener for transition end on the current slide.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onTransitionEnd( event ) {\n\n\t\tif( transition === 'running' && /section/gi.test( event.target.nodeName ) ) {\n\t\t\ttransition = 'idle';\n\t\t\tdispatchEvent({\n\t\t\t\ttype: 'slidetransitionend',\n\t\t\t\tdata: { indexh, indexv, previousSlide, currentSlide }\n\t\t\t});\n\t\t}\n\n\t}\n\n\t/**\n\t * A global listener for all click events inside of the\n\t * .slides container.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onSlidesClicked( event ) {\n\n\t\tconst anchor = Util.closest( event.target, 'a[href^=\"#\"]' );\n\n\t\t// If a hash link is clicked, we find the target slide\n\t\t// and navigate to it. We previously relied on 'hashchange'\n\t\t// for links like these but that prevented media with\n\t\t// audio tracks from playing in mobile browsers since it\n\t\t// wasn't considered a direct interaction with the document.\n\t\tif( anchor ) {\n\t\t\tconst hash = anchor.getAttribute( 'href' );\n\t\t\tconst indices = location.getIndicesFromHash( hash );\n\n\t\t\tif( indices ) {\n\t\t\t\tReveal.slide( indices.h, indices.v, indices.f );\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the window level 'resize' event.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onWindowResize( event ) {\n\n\t\tlayout();\n\n\t}\n\n\t/**\n\t * Handle for the window level 'visibilitychange' event.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onPageVisibilityChange( event ) {\n\n\t\t// If, after clicking a link or similar and we're coming back,\n\t\t// focus the document.body to ensure we can use keyboard shortcuts\n\t\tif( document.hidden === false && document.activeElement !== document.body ) {\n\t\t\t// Not all elements support .blur() - SVGs among them.\n\t\t\tif( typeof document.activeElement.blur === 'function' ) {\n\t\t\t\tdocument.activeElement.blur();\n\t\t\t}\n\t\t\tdocument.body.focus();\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the document level 'fullscreenchange' event.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onFullscreenChange( event ) {\n\n\t\tlet element = document.fullscreenElement || document.webkitFullscreenElement;\n\t\tif( element === dom.wrapper ) {\n\t\t\tevent.stopImmediatePropagation();\n\n\t\t\t// Timeout to avoid layout shift in Safari\n\t\t\tsetTimeout( () => {\n\t\t\t\tReveal.layout();\n\t\t\t\tReveal.focus.focus(); // focus.focus :'(\n\t\t\t}, 1 );\n\t\t}\n\n\t}\n\n\t/**\n\t * Handles clicks on links that are set to preview in the\n\t * iframe overlay.\n\t *\n\t * @param {object} event\n\t */\n\tfunction onPreviewLinkClicked( event ) {\n\n\t\tif( event.currentTarget && event.currentTarget.hasAttribute( 'href' ) ) {\n\t\t\tlet url = event.currentTarget.getAttribute( 'href' );\n\t\t\tif( url ) {\n\t\t\t\tshowPreview( url );\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Handles click on the auto-sliding controls element.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onAutoSlidePlayerClick( event ) {\n\n\t\t// Replay\n\t\tif( isLastSlide() && config.loop === false ) {\n\t\t\tslide( 0, 0 );\n\t\t\tresumeAutoSlide();\n\t\t}\n\t\t// Resume\n\t\telse if( autoSlidePaused ) {\n\t\t\tresumeAutoSlide();\n\t\t}\n\t\t// Pause\n\t\telse {\n\t\t\tpauseAutoSlide();\n\t\t}\n\n\t}\n\n\n\t// --------------------------------------------------------------------//\n\t// ------------------------------- API --------------------------------//\n\t// --------------------------------------------------------------------//\n\n\t// The public reveal.js API\n\tconst API = {\n\t\tVERSION,\n\n\t\tinitialize,\n\t\tconfigure,\n\n\t\tsync,\n\t\tsyncSlide,\n\t\tsyncFragments: fragments.sync.bind( fragments ),\n\n\t\t// Navigation methods\n\t\tslide,\n\t\tleft: navigateLeft,\n\t\tright: navigateRight,\n\t\tup: navigateUp,\n\t\tdown: navigateDown,\n\t\tprev: navigatePrev,\n\t\tnext: navigateNext,\n\n\t\t// Navigation aliases\n\t\tnavigateLeft, navigateRight, navigateUp, navigateDown, navigatePrev, navigateNext,\n\n\t\t// Fragment methods\n\t\tnavigateFragment: fragments.goto.bind( fragments ),\n\t\tprevFragment: fragments.prev.bind( fragments ),\n\t\tnextFragment: fragments.next.bind( fragments ),\n\n\t\t// Event binding\n\t\ton,\n\t\toff,\n\n\t\t// Legacy event binding methods left in for backwards compatibility\n\t\taddEventListener: on,\n\t\tremoveEventListener: off,\n\n\t\t// Forces an update in slide layout\n\t\tlayout,\n\n\t\t// Randomizes the order of slides\n\t\tshuffle,\n\n\t\t// Returns an object with the available routes as booleans (left/right/top/bottom)\n\t\tavailableRoutes,\n\n\t\t// Returns an object with the available fragments as booleans (prev/next)\n\t\tavailableFragments: fragments.availableRoutes.bind( fragments ),\n\n\t\t// Toggles a help overlay with keyboard shortcuts\n\t\ttoggleHelp,\n\n\t\t// Toggles the overview mode on/off\n\t\ttoggleOverview: overview.toggle.bind( overview ),\n\n\t\t// Toggles the \"black screen\" mode on/off\n\t\ttogglePause,\n\n\t\t// Toggles the auto slide mode on/off\n\t\ttoggleAutoSlide,\n\n\t\t// Slide navigation checks\n\t\tisFirstSlide,\n\t\tisLastSlide,\n\t\tisLastVerticalSlide,\n\t\tisVerticalSlide,\n\n\t\t// State checks\n\t\tisPaused,\n\t\tisAutoSliding,\n\t\tisSpeakerNotes: notes.isSpeakerNotesWindow.bind( notes ),\n\t\tisOverview: overview.isActive.bind( overview ),\n\t\tisFocused: focus.isFocused.bind( focus ),\n\t\tisPrintingPDF: print.isPrintingPDF.bind( print ),\n\n\t\t// Checks if reveal.js has been loaded and is ready for use\n\t\tisReady: () => ready,\n\n\t\t// Slide preloading\n\t\tloadSlide: slideContent.load.bind( slideContent ),\n\t\tunloadSlide: slideContent.unload.bind( slideContent ),\n\n\t\t// Preview management\n\t\tshowPreview,\n\t\thidePreview: closeOverlay,\n\n\t\t// Adds or removes all internal event listeners\n\t\taddEventListeners,\n\t\tremoveEventListeners,\n\t\tdispatchEvent,\n\n\t\t// Facility for persisting and restoring the presentation state\n\t\tgetState,\n\t\tsetState,\n\n\t\t// Presentation progress on range of 0-1\n\t\tgetProgress,\n\n\t\t// Returns the indices of the current, or specified, slide\n\t\tgetIndices,\n\n\t\t// Returns an Array of key:value maps of the attributes of each\n\t\t// slide in the deck\n\t\tgetSlidesAttributes,\n\n\t\t// Returns the number of slides that we have passed\n\t\tgetSlidePastCount,\n\n\t\t// Returns the total number of slides\n\t\tgetTotalSlides,\n\n\t\t// Returns the slide element at the specified index\n\t\tgetSlide,\n\n\t\t// Returns the previous slide element, may be null\n\t\tgetPreviousSlide: () => previousSlide,\n\n\t\t// Returns the current slide element\n\t\tgetCurrentSlide: () => currentSlide,\n\n\t\t// Returns the slide background element at the specified index\n\t\tgetSlideBackground,\n\n\t\t// Returns the speaker notes string for a slide, or null\n\t\tgetSlideNotes: notes.getSlideNotes.bind( notes ),\n\n\t\t// Returns an Array of all slides\n\t\tgetSlides,\n\n\t\t// Returns an array with all horizontal/vertical slides in the deck\n\t\tgetHorizontalSlides,\n\t\tgetVerticalSlides,\n\n\t\t// Checks if the presentation contains two or more horizontal\n\t\t// and vertical slides\n\t\thasHorizontalSlides,\n\t\thasVerticalSlides,\n\n\t\t// Checks if the deck has navigated on either axis at least once\n\t\thasNavigatedHorizontally: () => navigationHistory.hasNavigatedHorizontally,\n\t\thasNavigatedVertically: () => navigationHistory.hasNavigatedVertically,\n\n\t\t// Adds/removes a custom key binding\n\t\taddKeyBinding: keyboard.addKeyBinding.bind( keyboard ),\n\t\tremoveKeyBinding: keyboard.removeKeyBinding.bind( keyboard ),\n\n\t\t// Programmatically triggers a keyboard event\n\t\ttriggerKey: keyboard.triggerKey.bind( keyboard ),\n\n\t\t// Registers a new shortcut to include in the help overlay\n\t\tregisterKeyboardShortcut: keyboard.registerKeyboardShortcut.bind( keyboard ),\n\n\t\tgetComputedSlideSize,\n\n\t\t// Returns the current scale of the presentation content\n\t\tgetScale: () => scale,\n\n\t\t// Returns the current configuration object\n\t\tgetConfig: () => config,\n\n\t\t// Helper method, retrieves query string as a key:value map\n\t\tgetQueryHash: Util.getQueryHash,\n\n\t\t// Returns reveal.js DOM elements\n\t\tgetRevealElement: () => revealElement,\n\t\tgetSlidesElement: () => dom.slides,\n\t\tgetViewportElement: () => dom.viewport,\n\t\tgetBackgroundsElement: () => backgrounds.element,\n\n\t\t// API for registering and retrieving plugins\n\t\tregisterPlugin: plugins.registerPlugin.bind( plugins ),\n\t\thasPlugin: plugins.hasPlugin.bind( plugins ),\n\t\tgetPlugin: plugins.getPlugin.bind( plugins ),\n\t\tgetPlugins: plugins.getRegisteredPlugins.bind( plugins )\n\n\t};\n\n\t// Our internal API which controllers have access to\n\tUtil.extend( Reveal, {\n\t\t...API,\n\n\t\t// Methods for announcing content to screen readers\n\t\tannounceStatus,\n\t\tgetStatusText,\n\n\t\t// Controllers\n\t\tprint,\n\t\tfocus,\n\t\tprogress,\n\t\tcontrols,\n\t\tlocation,\n\t\toverview,\n\t\tfragments,\n\t\tslideContent,\n\t\tslideNumber,\n\n\t\tonUserInput,\n\t\tcloseOverlay,\n\t\tupdateSlidesVisibility,\n\t\tlayoutSlideContents,\n\t\ttransformSlides,\n\t\tcueAutoSlide,\n\t\tcancelAutoSlide\n\t} );\n\n\treturn API;\n\n};\n","import Deck, { VERSION } from './reveal.js'\n\n/**\n * Expose the Reveal class to the window. To create a\n * new instance:\n * let deck = new Reveal( document.querySelector( '.reveal' ), {\n * controls: false\n * } );\n * deck.initialize().then(() => {\n * // reveal.js is ready\n * });\n */\nlet Reveal = Deck;\n\n\n/**\n * The below is a thin shell that mimics the pre 4.0\n * reveal.js API and ensures backwards compatibility.\n * This API only allows for one Reveal instance per\n * page, whereas the new API above lets you run many\n * presentations on the same page.\n *\n * Reveal.initialize( { controls: false } ).then(() => {\n * // reveal.js is ready\n * });\n */\n\nlet enqueuedAPICalls = [];\n\nReveal.initialize = options => {\n\n\t// Create our singleton reveal.js instance\n\tObject.assign( Reveal, new Deck( document.querySelector( '.reveal' ), options ) );\n\n\t// Invoke any enqueued API calls\n\tenqueuedAPICalls.map( method => method( Reveal ) );\n\n\treturn Reveal.initialize();\n\n}\n\n/**\n * The pre 4.0 API let you add event listener before\n * initializing. We maintain the same behavior by\n * queuing up premature API calls and invoking all\n * of them when Reveal.initialize is called.\n */\n[ 'configure', 'on', 'off', 'addEventListener', 'removeEventListener', 'registerPlugin' ].forEach( method => {\n\tReveal[method] = ( ...args ) => {\n\t\tenqueuedAPICalls.push( deck => deck[method].call( null, ...args ) );\n\t}\n} );\n\nReveal.isReady = () => false;\n\nReveal.VERSION = VERSION;\n\nexport default Reveal;"],"names":["check","it","Math","global","globalThis","window","self","this","Function","fails","exec","error","descriptors","require$$0","Object","defineProperty","get","functionBindNative","test","bind","hasOwnProperty","NATIVE_BIND","call","prototype","functionCall","apply","arguments","$propertyIsEnumerable","propertyIsEnumerable","getOwnPropertyDescriptor","NASHORN_BUG","V","descriptor","enumerable","match","version","createPropertyDescriptor","bitmap","value","configurable","writable","FunctionPrototype","uncurryThis","functionUncurryThis","fn","toString","stringSlice","slice","classofRaw","require$$1","require$$2","classof","require$$3","split","indexedObject","TypeError","requireObjectCoercible","undefined","IndexedObject","toIndexedObject","isCallable","argument","isObject","aFunction","getBuiltIn","namespace","method","length","objectIsPrototypeOf","isPrototypeOf","engineUserAgent","userAgent","process","Deno","versions","v8","engineV8Version","V8_VERSION","nativeSymbol","getOwnPropertySymbols","symbol","Symbol","String","sham","useSymbolAsUid","iterator","USE_SYMBOL_AS_UID","require$$4","isSymbol","$Symbol","tryToString","aCallable","getMethod","P","func","setGlobal","key","SHARED","sharedStore","store","sharedModule","push","mode","copyright","license","source","toObject","hasOwnProperty_1","hasOwn","id","postfix","random","uid","shared","NATIVE_SYMBOL","require$$5","WellKnownSymbolsStore","symbolFor","createWellKnownSymbol","withoutSetter","wellKnownSymbol","name","description","ordinaryToPrimitive","input","pref","val","valueOf","require$$6","TO_PRIMITIVE","toPrimitive","result","exoticToPrim","toPropertyKey","document","EXISTS","createElement","documentCreateElement","ie8DomDefine","a","DESCRIPTORS","propertyIsEnumerableModule","IE8_DOM_DEFINE","require$$7","$getOwnPropertyDescriptor","O","f","v8PrototypeDefineBug","anObject","V8_PROTOTYPE_DEFINE_BUG","$defineProperty","ENUMERABLE","CONFIGURABLE","WRITABLE","Attributes","current","definePropertyModule","createNonEnumerableProperty","object","functionToString","inspectSource","set","has","WeakMap","nativeWeakMap","keys","sharedKey","hiddenKeys","NATIVE_WEAK_MAP","require$$8","OBJECT_ALREADY_INITIALIZED","state","wmget","wmhas","wmset","metadata","facade","STATE","internalState","enforce","getterFor","TYPE","type","getDescriptor","functionName","PROPER","CONFIGURABLE_FUNCTION_NAME","getInternalState","enforceInternalState","TEMPLATE","redefineModule","options","unsafe","simple","noTargetGet","replace","join","ceil","floor","toIntegerOrInfinity","number","max","min","toAbsoluteIndex","index","integer","toLength","lengthOfArrayLike","obj","createMethod","IS_INCLUDES","$this","el","fromIndex","arrayIncludes","includes","indexOf","objectKeysInternal","names","i","enumBugKeys","internalObjectKeys","concat","getOwnPropertyNames","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","ownKeys","getOwnPropertyDescriptorModule","copyConstructorProperties","target","exceptions","replacement","isForced","feature","detection","data","normalize","POLYFILL","NATIVE","string","toLowerCase","isForced_1","redefine","_export","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","forced","objectKeys","$assign","assign","objectAssign","b","A","B","alphabet","forEach","chr","T","argumentsLength","S","j","functionBindContext","that","isArray","Array","toStringTagSupport","TO_STRING_TAG_SUPPORT","TO_STRING_TAG","CORRECT_ARGUMENTS","tag","tryGet","callee","noop","empty","construct","constructorRegExp","INCORRECT_TO_STRING","isConstructorModern","isConstructorLegacy","isConstructor","called","SPECIES","arraySpeciesConstructor","originalArray","C","constructor","arraySpeciesCreate","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","callbackfn","specificCreate","boundFunction","create","arrayIteration","map","filter","some","every","find","findIndex","filterReject","arrayMethodHasSpeciesSupport","METHOD_NAME","array","foo","Boolean","$map","proto","objectToString","createProperty","propertyKey","$","require$$9","require$$11","IS_CONCAT_SPREADABLE","require$$10","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","arg","k","len","E","n","nativePromiseConstructor","Promise","aPossiblePrototype","objectSetPrototypeOf","setPrototypeOf","setter","CORRECT_SETTER","__proto__","setToStringTag","TAG","iterators","Iterators","ITERATOR","ArrayPrototype","isArrayIteratorMethod","getIteratorMethod","getIterator","usingIterator","iteratorMethod","iteratorClose","kind","innerResult","innerError","Result","stopped","ResultPrototype","SAFE_CLOSING","iteratorWithReturn","next","done","return","from","location","defer","channel","port","checkCorrectnessOfIteration","SKIP_CLOSING","ITERATION_SUPPORT","aConstructor","speciesConstructor","defaultConstructor","functionApply","Reflect","html","arraySlice","engineIsIos","engineIsNode","IS_IOS","IS_NODE","setImmediate","clear","clearImmediate","Dispatch","MessageChannel","counter","queue","ONREADYSTATECHANGE","run","runner","listener","event","post","postMessage","protocol","host","args","nextTick","now","port2","port1","onmessage","addEventListener","importScripts","appendChild","removeChild","setTimeout","flush","head","last","notify","toggle","node","promise","then","task","engineIsIosPebble","Pebble","engineIsWebosWebkit","macrotask","IS_IOS_PEBBLE","IS_WEBOS_WEBKIT","MutationObserver","WebKitMutationObserver","queueMicrotaskDescriptor","queueMicrotask","parent","domain","exit","enter","resolve","createTextNode","observe","characterData","microtask","PromiseCapability","reject","$$resolve","$$reject","newPromiseCapability","Queue","tail","add","item","entry","Internal","OwnPromiseCapability","PromiseWrapper","nativeThen","engineIsBrowser","NativePromise","redefineAll","src","setSpecies","CONSTRUCTOR_NAME","Constructor","require$$12","require$$13","anInstance","Prototype","require$$15","iterate","iterable","unboundFunction","iterFn","step","AS_ENTRIES","IS_ITERATOR","INTERRUPTED","stop","condition","callFn","require$$17","require$$18","require$$19","require$$20","promiseResolve","x","promiseCapability","hostReportErrors","console","newPromiseCapabilityModule","require$$23","perform","require$$25","InternalStateModule","require$$26","require$$27","IS_BROWSER","require$$29","require$$30","require$$31","require$$28","PROMISE","setInternalState","getInternalPromiseState","NativePromisePrototype","PromiseConstructor","PromisePrototype","newGenericPromiseCapability","DISPATCH_EVENT","createEvent","dispatchEvent","NATIVE_REJECTION_EVENT","PromiseRejectionEvent","UNHANDLED_REJECTION","SUBCLASSING","FORCED","PROMISE_CONSTRUCTOR_SOURCE","GLOBAL_CORE_JS_PROMISE","FakePromise","INCORRECT_ITERATION","all","isThenable","callReaction","reaction","exited","ok","handler","fail","rejection","onHandleUnhandled","isReject","notified","reactions","onUnhandled","reason","initEvent","isUnhandled","emit","unwrap","internalReject","internalResolve","wrapper","executor","onFulfilled","onRejected","catch","wrap","r","capability","$promiseResolve","values","remaining","alreadyCalled","race","classList","DOMTokenListPrototype","domTokenListPrototype","arrayMethodIsStrict","$forEach","arrayForEach","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","handlePrototype","CollectionPrototype","COLLECTION_NAME","callWithSafeIterationClosing","ENTRIES","arrayLike","IS_CONSTRUCTOR","mapfn","mapping","charAt","charCodeAt","CONVERT_TO_STRING","pos","first","second","position","size","stringMultibyte","codeAt","defineProperties","Properties","props","activeXDocument","definePropertiesModule","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObjectViaActiveX","write","close","temp","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","style","display","contentWindow","open","F","IteratorPrototype","PrototypeOfArrayIteratorPrototype","arrayIterator","objectCreate","correctPrototypeGetter","getPrototypeOf","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","objectGetPrototypeOf","BUGGY_SAFARI_ITERATORS","NEW_ITERATOR_PROTOTYPE","iteratorsCore","returnThis","FunctionName","createIteratorConstructor","IteratorConstructor","NAME","ENUMERABLE_NEXT","PROPER_FUNCTION_NAME","KEYS","VALUES","defineIterator","Iterable","DEFAULT","IS_SET","CurrentIteratorPrototype","methods","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","entries","STRING_ITERATOR","iterated","point","whitespaces","whitespace","ltrim","RegExp","rtrim","stringTrim","start","end","trim","$trim","forcedStringTrimMethod","re1","re2","$RegExp","UNSUPPORTED_Y","re","lastIndex","MISSED_STICKY","sticky","regexpStickyHelpers","BROKEN_CARET","regexpUnsupportedDotAll","dotAll","flags","regexpUnsupportedNcg","groups","regexpFlags","ignoreCase","multiline","unicode","stickyHelpers","UNSUPPORTED_DOT_ALL","UNSUPPORTED_NCG","nativeReplace","nativeExec","patchedExec","UPDATES_LAST_INDEX_WRONG","NPCG_INCLUDED","reCopy","group","str","raw","charsAdded","strCopy","regexpExec","arraySliceSimple","fin","$getOwnPropertyNames","windowNames","getWindowNames","path","wrappedWellKnownSymbolModule","require$$14","require$$16","$toString","require$$21","nativeObjectCreate","require$$22","require$$24","getOwnPropertyNamesExternal","require$$32","require$$33","require$$35","require$$36","require$$37","require$$38","defineWellKnownSymbol","require$$40","require$$41","require$$42","HIDDEN","require$$34","SYMBOL","SymbolPrototype","QObject","$stringify","nativeGetOwnPropertyDescriptor","nativeDefineProperty","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","$defineProperties","properties","$getOwnPropertySymbols","IS_OBJECT_PROTOTYPE","for","keyFor","sym","useSetter","useSimple","stringify","replacer","space","$replacer","hint","NativeSymbol","EmptyStringDescriptionStore","SymbolWrapper","symbolToString","symbolValueOf","regexp","desc","RegExpPrototype","fixRegexpWellKnownSymbolLogic","SHAM","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","uncurriedNativeRegExpMethod","nativeMethod","arg2","forceStringMethod","uncurriedNativeMethod","$exec","advanceStringIndex","regexpExecAbstract","R","regExpExec","MATCH","nativeMatch","maybeCallNative","matcher","rx","res","fullUnicode","matchStr","HAS_SPECIES_SUPPORT","MAXIMUM_ALLOWED_LENGTH_EXCEEDED","splice","deleteCount","insertCount","actualDeleteCount","to","actualStart","fixRegExpWellKnownSymbolLogic","isRegExp","callRegExpExec","MAX_UINT32","$push","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","SPLIT","nativeSplit","internalSplit","separator","limit","lim","lastLength","output","lastLastIndex","separatorCopy","splitter","unicodeMatching","p","q","e","z","thisNumberValue","inheritIfRequired","dummy","Wrapper","NewTarget","NewTargetPrototype","NUMBER","NativeNumber","NumberPrototype","toNumeric","primValue","toNumber","third","radix","maxCode","digits","code","NaN","parseInt","NumberWrapper","FUNCTION_NAME_EXISTS","nameRE","un$Join","ES3_STRINGS","STRICT_METHOD","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","getSubstitution","matched","captures","namedCaptures","tailPos","m","symbols","ch","capture","REPLACE","stringIndexOf","REPLACE_KEEPS_$0","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","_","UNSAFE_SUBSTITUTE","searchValue","replaceValue","functionalReplace","results","accumulatedResult","nextSourcePosition","replacerArgs","sameValue","is","y","SEARCH","nativeSearch","searcher","previousLastIndex","extend","queryAll","selector","querySelectorAll","toggleClass","className","remove","deserialize","parseFloat","transformElement","element","transform","matches","matchesMethod","matchesSelector","msMatchesSelector","closest","parentNode","createSingletonNode","container","tagname","classname","innerHTML","nodes","testNode","createStyleSheet","styleSheet","cssText","getQueryHash","query","search","shift","pop","unescape","getRemainingHeight","height","newHeight","oldHeight","offsetHeight","removeProperty","fileExtensionToMimeMap","getMimeTypeFromFile","filename","UA","navigator","testElement","isMobile","platform","maxTouchPoints","isChrome","isAndroid","supportsZoom","t","o","l","u","cancelAnimationFrame","requestAnimationFrame","s","dirty","active","c","styleComputed","v","d","availableWidth","clientWidth","currentWidth","scrollWidth","previousFontSize","currentFontSize","minSize","maxSize","whiteSpace","multiLine","getComputedStyle","getPropertyValue","preStyleTestCompleted","fontSize","CustomEvent","detail","oldValue","newValue","scaleFactor","h","w","observeMutations","observer","disconnect","originalStyle","g","subtree","childList","W","clearTimeout","observeWindowDelay","M","observeWindow","fitAll","newbie","fit","unfreeze","freeze","unsubscribe","SlideContent","Reveal","startEmbeddedIframe","preload","getConfig","preloadIframes","hasAttribute","slide","tagName","_this","shouldPreload","setAttribute","getAttribute","removeAttribute","media","sources","load","background","slideBackgroundElement","backgroundContent","slideBackgroundContentElement","backgroundIframe","backgroundImage","backgroundVideo","backgroundVideoLoop","backgroundVideoMuted","encodeURI","isSpeakerNotes","video","muted","excludeIframes","width","maxHeight","maxWidth","backgroundIframeElement","querySelector","layout","fitty","_this2","getSlideBackground","_appendParamToIframeSource","sourceAttribute","sourceURL","param","_this3","getSlidesElement","autoplay","_this4","autoPlayMedia","play","readyState","startEmbeddedMedia","controls","removeEventListener","isAttachedToDOM","isVisible","currentTime","unloadIframes","pause","_this5","SlideNumber","getRevealElement","config","oldConfig","slideNumberDisplay","slideNumber","isPrintingPDF","showSlideNumber","getSlideNumber","getCurrentSlide","format","getHorizontalSlides","horizontalOffset","dataset","visibility","getSlidePastCount","getTotalSlides","indices","getIndices","sep","isVerticalSlide","url","getHash","formatNumber","delimiter","isNaN","colorToRgb","color","hex3","hex6","substr","rgb","rgba","Backgrounds","slideh","backgroundStack","createBackground","slidev","parallaxBackgroundImage","backgroundSize","parallaxBackgroundSize","backgroundRepeat","parallaxBackgroundRepeat","backgroundPosition","parallaxBackgroundPosition","contentElement","sync","backgroundColor","backgroundTransition","backgroundOpacity","dataPreload","opacity","contrastColor","computedBackgroundStyle","includeAll","currentSlide","currentBackground","horizontalPast","rtl","horizontalFuture","childNodes","backgroundh","backgroundv","previousBackground","slideContent","stopEmbeddedContent","startEmbeddedContent","currentBackgroundContent","backgroundImageURL","previousBackgroundHash","currentBackgroundHash","classToBubble","contains","backgroundWidth","backgroundHeight","horizontalSlides","verticalSlides","getVerticalSlides","slideWidth","offsetWidth","horizontalSlideCount","parallaxBackgroundHorizontal","verticalOffsetMultiplier","verticalOffset","slideHeight","verticalSlideCount","parallaxBackgroundVertical","nativeKeys","$filter","un$Slice","SLIDES_SELECTOR","HORIZONTAL_SLIDES_SELECTOR","VERTICAL_SLIDES_SELECTOR","POST_MESSAGE_METHOD_BLACKLIST","FRAGMENT_STYLE_REGEX","autoAnimateCounter","AutoAnimate","fromSlide","toSlide","reset","allSlides","getSlides","toSlideIndex","fromSlideIndex","autoAnimateStyleSheet","animationOptions","getAutoAnimateOptions","autoAnimate","slideDirection","css","getAutoAnimatableElements","elements","autoAnimateElements","autoAnimateUnmatched","defaultUnmatchedDuration","duration","defaultUnmatchedDelay","getUnmatchedAutoAnimateElements","unmatchedElement","unmatchedOptions","delay","autoAnimateTarget","fontWeight","sheet","elementOptions","easing","fromProps","getAutoAnimatableProperties","toProps","styles","translate","scale","presentationScale","getScale","delta","scaleX","scaleY","round","propertyName","toValue","fromValue","explicitValue","toStyleProperties","fromCSS","toCSS","inheritedOptions","autoAnimateEasing","autoAnimateDuration","autoAnimatedParent","autoAnimateDelay","direction","bounds","measure","center","getBoundingClientRect","offsetLeft","offsetTop","computedStyles","autoAnimateStyles","property","pairs","autoAnimateMatcher","getAutoAnimatePairs","reserved","pair","textNodes","findAutoAnimateMatches","nodeName","innerText","textContent","getLocalBoundingBox","fromScope","toScope","serializer","fromMatches","toMatches","fromElement","pimaryIndex","secondaryIndex","rootElement","children","reduce","containsAnimatedElements","mergeSort","comparefn","middle","insertionSort","merge","left","right","llength","rlength","lindex","rindex","arraySort","firefox","engineFfVersion","engineIsIeOrEdge","webkit","engineWebkitVersion","internalSort","FF","IE_OR_EDGE","V8","WEBKIT","un$Sort","sort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STABLE_SORT","fromCharCode","itemsLength","items","arrayLength","getSortCompare","Fragments","fragments","disable","enable","hiddenFragments","prev","grouped","ordered","unordered","sorted","fragment","horizontalSlide","verticalSlide","changedFragments","shown","hidden","maxIndex","currentFragment","wasVisible","announceStatus","getStatusText","bubbles","offset","lastVisibleFragment","update","progress","fragmentInURL","writeURL","goto","Overview","onSlideClicked","overview","isActive","cancelAutoSlide","getBackgroundsElement","slideSize","getComputedSlideSize","overviewSlideWidth","overviewSlideHeight","updateSlidesVisibility","hslide","vslide","hbackground","vbackground","vmin","innerWidth","innerHeight","transformSlides","cueAutoSlide","override","activate","deactivate","preventDefault","Keyboard","shortcuts","bindings","onDocumentKeyDown","onDocumentKeyPress","navigationMode","binding","callback","_typeof","keyCode","shiftKey","charCode","toggleHelp","keyboardCondition","isFocused","autoSlideWasPaused","isAutoSliding","onUserInput","activeElementIsCE","activeElement","isContentEditable","activeElementIsInput","activeElementIsNotes","unusedModifier","altKey","ctrlKey","metaKey","resumeKeyCodes","keyboard","isPaused","requestMethod","useLinearMode","hasHorizontalSlides","hasVerticalSlides","triggered","action","skipFragments","up","Number","MAX_VALUE","down","togglePause","embedded","getViewportElement","documentElement","requestFullscreen","webkitRequestFullscreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen","autoSlideStoppable","toggleAutoSlide","closeOverlay","Location","writeURLTimeout","onWindowHashChange","hash","bits","hashIndexBase","hashOneBasedIndex","getElementById","decodeURIComponent","currentIndices","newIndices","getIndicesFromHash","history","replaceState","pathname","encodeURIComponent","readURL","Controls","onNavigateLeftClicked","onNavigateRightClicked","onNavigateUpClicked","onNavigateDownClicked","onNavigatePrevClicked","onNavigateNextClicked","revealElement","controlsLeft","controlsRight","controlsUp","controlsDown","controlsPrev","controlsNext","controlsRightArrow","controlsLeftArrow","controlsDownArrow","controlsLayout","controlsBackArrows","pointerEvents","eventName","routes","availableRoutes","fragmentsRoutes","controlsTutorial","hasNavigatedVertically","hasNavigatedHorizontally","Progress","onProgressClicked","bar","getProgress","slides","slidesTotal","slideIndex","clientX","getMaxWidth","targetIndices","Pointer","lastMouseWheelStep","cursorHidden","cursorInactiveTimeout","onDocumentCursorActive","onDocumentMouseScroll","mouseWheel","hideInactiveCursor","showCursor","cursor","hideCursor","hideCursorTime","Date","wheelDelta","TO_ENTRIES","$values","loadScript","script","async","onload","onreadystatechange","onerror","err","Error","insertBefore","lastChild","Plugins","reveal","registeredPlugins","asyncDependencies","plugins","dependencies","registerPlugin","scripts","scriptsToLoad","scriptLoadedCallback","initPlugins","warn","pluginValues","pluginsToInitialize","loadAsync","initNextPlugin","afterPlugInitialized","plugin","init","runtime","exports","Op","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","context","Context","_invoke","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","info","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","iter","reverse","skipTempReset","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","module","regeneratorRuntime","accidentalStrictMode","Print","doingSlideNumbers","pageWidth","margin","pageHeight","body","viewportElement","viewportStyles","presentationBackground","layoutSlideContents","slideScrollHeights","scrollHeight","pages","pageContainer","top","contentHeight","numberOfPages","pdfMaxPagesPerSlide","page","pdfPageHeightOffset","showNotes","notes","getSlideNotes","notesLayout","notesElement","notesSpacing","bottom","numberElement","pdfSeparateFragments","previousFragmentStep","fragmentGroups","clonedPage","cloneNode","Touch","touchStartX","touchStartY","touchStartCount","touchCaptured","onPointerDown","onPointerMove","onPointerUp","onTouchStart","onTouchMove","onTouchEnd","msPointerEnabled","isSwipePrevented","touches","clientY","currentX","currentY","includeFragments","deltaX","deltaY","abs","pointerType","MSPOINTER_TYPE_TOUCH","STATE_FOCUS","STATE_BLUR","Focus","onRevealPointerDown","onDocumentPointerDown","blur","focus","unbind","Notes","print","hasNotes","UNSCOPABLES","fill","endPos","addToUnscopables","Playback","progressCheck","diameter","diameter2","thickness","playing","progressOffset","canvas","getContext","render","wasPlaying","animate","progressBefore","radius","iconSize","endAngle","PI","startAngle","save","clearRect","beginPath","arc","fillStyle","lineWidth","strokeStyle","stroke","fillRect","moveTo","lineTo","restore","minScale","maxScale","respondToHashChanges","disableLayout","touch","loop","shuffle","help","showHiddenSlides","autoSlide","autoSlideMethod","defaultTiming","previewLinks","postMessageEvents","focusBodyOnPageVisibilityChange","transition","transitionSpeed","POSITIVE_INFINITY","viewDistance","mobileViewDistance","VERSION","indexh","indexv","previousSlide","autoSlidePlayer","ready","navigationHistory","slidesTransform","dom","autoSlideTimeout","autoSlideStartTime","autoSlidePaused","backgrounds","pointer","initialize","initOptions","defaultConfig","Util","setViewport","on","viewport","removeHiddenSlides","setupDOM","setupPostMessage","setupScrollPrevention","setupFullscreen","resetVerticalSlides","configure","removeEventListeners","setupPDF","Device","pauseOverlay","statusElement","createStatusElement","overflow","clip","text","nodeType","isAriaHidden","isDisplayHidden","child","setInterval","scrollTop","scrollLeft","onFullscreenChange","JSON","parse","dispatchPostMessage","isReady","numberOfSlides","setProperty","resume","enablePreviewLinks","disablePreviewLinks","destroy","onAutoSlidePlayerClick","addEventListeners","onWindowResize","onSlidesClicked","onTransitionEnd","onPageVisibilityChange","useCapture","off","transforms","message","getState","onPreviewLinkClicked","showPreview","overlay","showHelp","getShortcuts","getBindings","oldScale","presentationWidth","presentationHeight","zoom","devicePixelRatio","updateParallax","remainingHeight","nw","naturalWidth","videoWidth","nh","naturalHeight","videoHeight","es","setPreviousVerticalIndex","stack","getPreviousVerticalIndex","attributeName","isLastVerticalSlide","nextElementSibling","isFirstSlide","isLastSlide","wasPaused","resumeAutoSlide","pauseAutoSlide","origin","defaultPrevented","stateBefore","indexhBefore","indexvBefore","updateSlides","slideChanged","currentHorizontalSlide","currentVerticalSlides","autoAnimateTransition","getVerticalStacks","stateLoop","sortAll","updateVisibility","formatEmbeddedContent","syncSlide","beforeSlide","slidesLength","printMode","wasPresent","slideState","distanceX","horizontalSlidesLength","verticalSlidesLength","unload","oy","fragmentRoutes","pastCount","mainLoop","totalCount","allFragments","isVertical","getSlidesAttributes","attributes","attribute","getSlide","indexf","paused","setState","pausedFlag","overviewFlag","fragmentAutoSlide","parentAutoSlide","slideAutoSlide","playbackRate","navigateNext","setPlaying","navigateLeft","navigateRight","navigateUp","navigateDown","navigatePrev","anchor","fullscreenElement","webkitFullscreenElement","stopImmediatePropagation","currentTarget","API","syncFragments","navigateFragment","prevFragment","nextFragment","availableFragments","toggleOverview","isSpeakerNotesWindow","isOverview","loadSlide","unloadSlide","hidePreview","getPreviousSlide","addKeyBinding","removeKeyBinding","triggerKey","registerKeyboardShortcut","hasPlugin","getPlugin","getPlugins","getRegisteredPlugins","Deck","enqueuedAPICalls","deck"],"mappings":"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"} |