Welcome to mirror list, hosted at ThFree Co, Russian Federation.

vendors~editor.js.map « js - github.com/nextcloud/text.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 24a0b95226a345d5e126a57e9fe198004fc3e7ec (plain)
1
{"version":3,"sources":["webpack:///./node_modules/core-js/internals/fails.js","webpack:///./node_modules/core-js/internals/well-known-symbol.js","webpack:///./node_modules/core-js/internals/global.js","webpack:///./node_modules/axios/lib/utils.js","webpack:///./node_modules/core-js/internals/has.js","webpack:///./node_modules/core-js/internals/is-object.js","webpack:///./node_modules/core-js/internals/an-object.js","webpack:///./node_modules/core-js/internals/descriptors.js","webpack:///./node_modules/core-js/internals/object-define-property.js","webpack:///./node_modules/core-js/internals/create-non-enumerable-property.js","webpack:///./node_modules/core-js/internals/export.js","webpack:///../lib/index.ts","webpack:///./node_modules/core-js/internals/redefine.js","webpack:///./node_modules/core-js/internals/to-length.js","webpack:///./node_modules/core-js/internals/to-object.js","webpack:///./node_modules/core-js/internals/iterators.js","webpack:///./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack:///./node_modules/core-js/internals/classof-raw.js","webpack:///./node_modules/core-js/internals/to-indexed-object.js","webpack:///./node_modules/core-js/internals/internal-state.js","webpack:///./node_modules/core-js/internals/get-built-in.js","webpack:///./node_modules/core-js/internals/create-property-descriptor.js","webpack:///./node_modules/core-js/internals/require-object-coercible.js","webpack:///./node_modules/core-js/internals/to-integer.js","webpack:///./node_modules/core-js/internals/hidden-keys.js","webpack:///./node_modules/core-js/internals/array-method-uses-to-length.js","webpack:///./node_modules/core-js/internals/object-create.js","webpack:///./node_modules/core-js/internals/set-to-string-tag.js","webpack:///./node_modules/core-js/internals/to-primitive.js","webpack:///./node_modules/core-js/internals/is-pure.js","webpack:///./node_modules/core-js/internals/function-bind-context.js","webpack:///./node_modules/core-js/internals/indexed-object.js","webpack:///./node_modules/core-js/internals/shared-key.js","webpack:///./node_modules/core-js/internals/uid.js","webpack:///./node_modules/core-js/internals/set-global.js","webpack:///./node_modules/core-js/internals/enum-bug-keys.js","webpack:///./node_modules/@nextcloud/event-bus/node_modules/semver/internal/constants.js","webpack:///./node_modules/core-js/internals/define-iterator.js","webpack:///./node_modules/core-js/internals/to-string-tag-support.js","webpack:///./node_modules/core-js/internals/regexp-exec.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/css-loader/dist/runtime/api.js","webpack:///./node_modules/vue-style-loader/lib/listToStyles.js","webpack:///./node_modules/vue-style-loader/lib/addStylesClient.js","webpack:///./node_modules/core-js/modules/es.object.to-string.js","webpack:///./node_modules/core-js/modules/es.array.iterator.js","webpack:///./node_modules/core-js/modules/es.regexp.exec.js","webpack:///./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack:///./node_modules/core-js/internals/array-method-has-species-support.js","webpack:///./node_modules/core-js/internals/is-forced.js","webpack:///./node_modules/core-js/modules/es.array.concat.js","webpack:///./node_modules/core-js/internals/an-instance.js","webpack:///./node_modules/core-js/internals/array-iteration.js","webpack:///./node_modules/core-js/internals/array-species-create.js","webpack:///./node_modules/core-js/internals/is-array.js","webpack:///./node_modules/core-js/internals/object-property-is-enumerable.js","webpack:///./node_modules/core-js/internals/document-create-element.js","webpack:///./node_modules/core-js/internals/inspect-source.js","webpack:///./node_modules/core-js/internals/shared.js","webpack:///./node_modules/core-js/internals/array-includes.js","webpack:///./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack:///./node_modules/core-js/internals/object-keys.js","webpack:///./node_modules/core-js/internals/native-symbol.js","webpack:///./node_modules/core-js/internals/array-method-is-strict.js","webpack:///./node_modules/core-js/internals/engine-v8-version.js","webpack:///./node_modules/core-js/internals/iterate.js","webpack:///./node_modules/core-js/internals/classof.js","webpack:///./node_modules/core-js/internals/string-multibyte.js","webpack:///./node_modules/core-js/modules/es.object.assign.js","webpack:///./node_modules/core-js/internals/ie8-dom-define.js","webpack:///./node_modules/core-js/internals/shared-store.js","webpack:///./node_modules/core-js/internals/object-keys-internal.js","webpack:///./node_modules/axios/lib/helpers/bind.js","webpack:///./node_modules/axios/lib/helpers/buildURL.js","webpack:///./node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/axios/lib/defaults.js","webpack:///./node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/axios/lib/core/createError.js","webpack:///./node_modules/axios/lib/core/mergeConfig.js","webpack:///./node_modules/axios/lib/cancel/Cancel.js","webpack:///./node_modules/core-js/modules/es.array.for-each.js","webpack:///./node_modules/core-js/internals/array-for-each.js","webpack:///./node_modules/@nextcloud/event-bus/node_modules/semver/internal/re.js","webpack:///./node_modules/@nextcloud/event-bus/node_modules/semver/internal/debug.js","webpack:///./node_modules/@nextcloud/event-bus/node_modules/semver/classes/semver.js","webpack:///./node_modules/core-js/internals/iterators-core.js","webpack:///./node_modules/core-js/internals/object-get-prototype-of.js","webpack:///./node_modules/core-js/internals/object-set-prototype-of.js","webpack:///./node_modules/core-js/internals/internal-metadata.js","webpack:///./node_modules/core-js/internals/dom-iterables.js","webpack:///./node_modules/core-js/internals/regexp-flags.js","webpack:///./node_modules/core-js/modules/es.string.iterator.js","webpack:///./node_modules/core-js/modules/es.regexp.to-string.js","webpack:///./node_modules/core-js/modules/web.dom-collections.iterator.js","webpack:///./node_modules/core-js/modules/es.string.replace.js","webpack:///./node_modules/core-js/modules/es.array.index-of.js","webpack:///./node_modules/core-js/internals/object-get-own-property-names.js","webpack:///./node_modules/core-js/internals/create-property.js","webpack:///./node_modules/core-js/internals/to-absolute-index.js","webpack:///./node_modules/core-js/internals/a-function.js","webpack:///./node_modules/core-js/internals/get-iterator-method.js","webpack:///./node_modules/core-js/modules/es.array.filter.js","webpack:///./node_modules/core-js/internals/check-correctness-of-iteration.js","webpack:///./node_modules/core-js/internals/inherit-if-required.js","webpack:///./node_modules/core-js/internals/redefine-all.js","webpack:///./node_modules/core-js/internals/copy-constructor-properties.js","webpack:///./node_modules/core-js/internals/path.js","webpack:///./node_modules/core-js/internals/object-assign.js","webpack:///./node_modules/core-js/internals/use-symbol-as-uid.js","webpack:///./node_modules/core-js/internals/engine-user-agent.js","webpack:///./node_modules/core-js/internals/add-to-unscopables.js","webpack:///./node_modules/core-js/internals/object-define-properties.js","webpack:///./node_modules/core-js/internals/html.js","webpack:///./node_modules/core-js/internals/create-iterator-constructor.js","webpack:///./node_modules/core-js/internals/is-array-iterator-method.js","webpack:///./node_modules/core-js/internals/call-with-safe-iteration-closing.js","webpack:///./node_modules/core-js/internals/set-species.js","webpack:///./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","webpack:///./node_modules/core-js/internals/advance-string-index.js","webpack:///./node_modules/core-js/internals/regexp-exec-abstract.js","webpack:///./node_modules/core-js/internals/native-weak-map.js","webpack:///./node_modules/core-js/internals/own-keys.js","webpack:///./node_modules/axios/index.js","webpack:///./node_modules/axios/lib/axios.js","webpack:///./node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/axios/lib/core/InterceptorManager.js","webpack:///./node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///./node_modules/axios/lib/core/settle.js","webpack:///./node_modules/axios/lib/core/enhanceError.js","webpack:///./node_modules/axios/lib/core/buildFullPath.js","webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/axios/lib/helpers/combineURLs.js","webpack:///./node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./node_modules/axios/lib/helpers/cookies.js","webpack:///./node_modules/axios/lib/cancel/CancelToken.js","webpack:///./node_modules/axios/lib/helpers/spread.js","webpack:///../lib/requesttoken.ts","webpack:///../lib/ProxyBus.ts","webpack:///./node_modules/@nextcloud/event-bus/node_modules/semver/functions/valid.js","webpack:///./node_modules/@nextcloud/event-bus/node_modules/semver/functions/parse.js","webpack:///./node_modules/@nextcloud/event-bus/node_modules/semver/internal/identifiers.js","webpack:///./node_modules/@nextcloud/event-bus/node_modules/semver/functions/major.js","webpack:///../lib/SimpleBus.ts","webpack:///./node_modules/core-js/internals/correct-prototype-getter.js","webpack:///./node_modules/core-js/internals/a-possible-prototype.js","webpack:///./node_modules/core-js/modules/es.map.js","webpack:///./node_modules/core-js/internals/collection.js","webpack:///./node_modules/core-js/internals/freezing.js","webpack:///./node_modules/core-js/internals/collection-strong.js","webpack:///./node_modules/core-js/internals/object-to-string.js","webpack:///./node_modules/core-js/modules/web.dom-collections.for-each.js","webpack:///../lib/user.ts","webpack:///./node_modules/core-js/internals/regexp-sticky-helpers.js","webpack:///./node_modules/moment/moment.js","webpack:///./node_modules/markdown-it/lib/common/utils.js","webpack:///../src/commands.js","webpack:///../src/selection.js","webpack:///../src/transaction.js","webpack:///../src/state.js","webpack:///../src/plugin.js","webpack:///./node_modules/orderedmap/index.es.js","webpack:///../src/fragment.js","webpack:///../src/diff.js","webpack:///../src/comparedeep.js","webpack:///../src/mark.js","webpack:///../src/replace.js","webpack:///../src/resolvedpos.js","webpack:///../src/node.js","webpack:///../src/content.js","webpack:///../src/schema.js","webpack:///../src/from_dom.js","webpack:///../src/to_dom.js","webpack:///../src/dropcursor.js","webpack:///../src/gapcursor.js","webpack:///../src/index.js","webpack:///./node_modules/tiptap/dist/tiptap.esm.js","webpack:///../src/map.js","webpack:///../src/transform.js","webpack:///../src/step.js","webpack:///../src/replace_step.js","webpack:///../src/structure.js","webpack:///../src/mark_step.js","webpack:///../src/inputrules.js","webpack:///../src/rules.js","webpack:///../src/rulebuilders.js","webpack:///NextcloudVue.[name]/webpack/universalModuleDefinition","webpack:///NextcloudVue.[name]/webpack/bootstrap","webpack:///NextcloudVue.[name]/node_modules/css-loader/dist/runtime/api.js","webpack:///NextcloudVue.[name]/src/directives/Tooltip/index.js","webpack:///NextcloudVue.[name]/node_modules/vue-style-loader/lib/listToStyles.js","webpack:///NextcloudVue.[name]/node_modules/vue-style-loader/lib/addStylesClient.js","webpack:///webpack:/NextcloudVue.[name]/external \"v-tooltip\"","webpack:///NextcloudVue.[name]/src/directives/Tooltip/index.scss?30d2","webpack:///NextcloudVue.[name]/src/directives/Tooltip/index.scss","webpack:///./node_modules/rope-sequence/dist/index.es.js","webpack:///../src/history.js","webpack:///./node_modules/tiptap-extensions/dist/extensions.esm.js","webpack:///../src/browser.js","webpack:///../src/dom.js","webpack:///../src/domcoords.js","webpack:///../src/viewdesc.js","webpack:///../src/capturekeys.js","webpack:///../src/domchange.js","webpack:///../src/clipboard.js","webpack:///../src/domobserver.js","webpack:///../src/input.js","webpack:///../src/decoration.js","webpack:///./node_modules/tiptap-utils/dist/utils.esm.js","webpack:///../src/transforms.js","webpack:///../src/helpers.js","webpack:///../src/table.js","webpack:///../src/schema-list.js","webpack:///./node_modules/tiptap-commands/dist/commands.esm.js","webpack:///../src/collab.js","webpack:///./node_modules/uc.micro/categories/P/regex.js","webpack:///./node_modules/markdown-it/lib/ruler.js","webpack:///./node_modules/markdown-it/lib/token.js","webpack:///./node_modules/w3c-keyname/index.es.js","webpack:///../src/keymap.js","webpack:///./node_modules/escape-html/index.js","webpack:///./node_modules/moment/locale/af.js","webpack:///./node_modules/moment/locale/ar.js","webpack:///./node_modules/moment/locale/ar-dz.js","webpack:///./node_modules/moment/locale/ar-kw.js","webpack:///./node_modules/moment/locale/ar-ly.js","webpack:///./node_modules/moment/locale/ar-ma.js","webpack:///./node_modules/moment/locale/ar-sa.js","webpack:///./node_modules/moment/locale/ar-tn.js","webpack:///./node_modules/moment/locale/az.js","webpack:///./node_modules/moment/locale/be.js","webpack:///./node_modules/moment/locale/bg.js","webpack:///./node_modules/moment/locale/bm.js","webpack:///./node_modules/moment/locale/bn.js","webpack:///./node_modules/moment/locale/bo.js","webpack:///./node_modules/moment/locale/br.js","webpack:///./node_modules/moment/locale/bs.js","webpack:///./node_modules/moment/locale/ca.js","webpack:///./node_modules/moment/locale/cs.js","webpack:///./node_modules/moment/locale/cv.js","webpack:///./node_modules/moment/locale/cy.js","webpack:///./node_modules/moment/locale/da.js","webpack:///./node_modules/moment/locale/de.js","webpack:///./node_modules/moment/locale/de-at.js","webpack:///./node_modules/moment/locale/de-ch.js","webpack:///./node_modules/moment/locale/dv.js","webpack:///./node_modules/moment/locale/el.js","webpack:///./node_modules/moment/locale/en-SG.js","webpack:///./node_modules/moment/locale/en-au.js","webpack:///./node_modules/moment/locale/en-ca.js","webpack:///./node_modules/moment/locale/en-gb.js","webpack:///./node_modules/moment/locale/en-ie.js","webpack:///./node_modules/moment/locale/en-il.js","webpack:///./node_modules/moment/locale/en-nz.js","webpack:///./node_modules/moment/locale/eo.js","webpack:///./node_modules/moment/locale/es.js","webpack:///./node_modules/moment/locale/es-do.js","webpack:///./node_modules/moment/locale/es-us.js","webpack:///./node_modules/moment/locale/et.js","webpack:///./node_modules/moment/locale/eu.js","webpack:///./node_modules/moment/locale/fa.js","webpack:///./node_modules/moment/locale/fi.js","webpack:///./node_modules/moment/locale/fo.js","webpack:///./node_modules/moment/locale/fr.js","webpack:///./node_modules/moment/locale/fr-ca.js","webpack:///./node_modules/moment/locale/fr-ch.js","webpack:///./node_modules/moment/locale/fy.js","webpack:///./node_modules/moment/locale/ga.js","webpack:///./node_modules/moment/locale/gd.js","webpack:///./node_modules/moment/locale/gl.js","webpack:///./node_modules/moment/locale/gom-latn.js","webpack:///./node_modules/moment/locale/gu.js","webpack:///./node_modules/moment/locale/he.js","webpack:///./node_modules/moment/locale/hi.js","webpack:///./node_modules/moment/locale/hr.js","webpack:///./node_modules/moment/locale/hu.js","webpack:///./node_modules/moment/locale/hy-am.js","webpack:///./node_modules/moment/locale/id.js","webpack:///./node_modules/moment/locale/is.js","webpack:///./node_modules/moment/locale/it.js","webpack:///./node_modules/moment/locale/it-ch.js","webpack:///./node_modules/moment/locale/ja.js","webpack:///./node_modules/moment/locale/jv.js","webpack:///./node_modules/moment/locale/ka.js","webpack:///./node_modules/moment/locale/kk.js","webpack:///./node_modules/moment/locale/km.js","webpack:///./node_modules/moment/locale/kn.js","webpack:///./node_modules/moment/locale/ko.js","webpack:///./node_modules/moment/locale/ku.js","webpack:///./node_modules/moment/locale/ky.js","webpack:///./node_modules/moment/locale/lb.js","webpack:///./node_modules/moment/locale/lo.js","webpack:///./node_modules/moment/locale/lt.js","webpack:///./node_modules/moment/locale/lv.js","webpack:///./node_modules/moment/locale/me.js","webpack:///./node_modules/moment/locale/mi.js","webpack:///./node_modules/moment/locale/mk.js","webpack:///./node_modules/moment/locale/ml.js","webpack:///./node_modules/moment/locale/mn.js","webpack:///./node_modules/moment/locale/mr.js","webpack:///./node_modules/moment/locale/ms.js","webpack:///./node_modules/moment/locale/ms-my.js","webpack:///./node_modules/moment/locale/mt.js","webpack:///./node_modules/moment/locale/my.js","webpack:///./node_modules/moment/locale/nb.js","webpack:///./node_modules/moment/locale/ne.js","webpack:///./node_modules/moment/locale/nl.js","webpack:///./node_modules/moment/locale/nl-be.js","webpack:///./node_modules/moment/locale/nn.js","webpack:///./node_modules/moment/locale/pa-in.js","webpack:///./node_modules/moment/locale/pl.js","webpack:///./node_modules/moment/locale/pt.js","webpack:///./node_modules/moment/locale/pt-br.js","webpack:///./node_modules/moment/locale/ro.js","webpack:///./node_modules/moment/locale/ru.js","webpack:///./node_modules/moment/locale/sd.js","webpack:///./node_modules/moment/locale/se.js","webpack:///./node_modules/moment/locale/si.js","webpack:///./node_modules/moment/locale/sk.js","webpack:///./node_modules/moment/locale/sl.js","webpack:///./node_modules/moment/locale/sq.js","webpack:///./node_modules/moment/locale/sr.js","webpack:///./node_modules/moment/locale/sr-cyrl.js","webpack:///./node_modules/moment/locale/ss.js","webpack:///./node_modules/moment/locale/sv.js","webpack:///./node_modules/moment/locale/sw.js","webpack:///./node_modules/moment/locale/ta.js","webpack:///./node_modules/moment/locale/te.js","webpack:///./node_modules/moment/locale/tet.js","webpack:///./node_modules/moment/locale/tg.js","webpack:///./node_modules/moment/locale/th.js","webpack:///./node_modules/moment/locale/tl-ph.js","webpack:///./node_modules/moment/locale/tlh.js","webpack:///./node_modules/moment/locale/tr.js","webpack:///./node_modules/moment/locale/tzl.js","webpack:///./node_modules/moment/locale/tzm.js","webpack:///./node_modules/moment/locale/tzm-latn.js","webpack:///./node_modules/moment/locale/ug-cn.js","webpack:///./node_modules/moment/locale/uk.js","webpack:///./node_modules/moment/locale/ur.js","webpack:///./node_modules/moment/locale/uz.js","webpack:///./node_modules/moment/locale/uz-latn.js","webpack:///./node_modules/moment/locale/vi.js","webpack:///./node_modules/moment/locale/x-pseudo.js","webpack:///./node_modules/moment/locale/yo.js","webpack:///./node_modules/moment/locale/zh-cn.js","webpack:///./node_modules/moment/locale/zh-hk.js","webpack:///./node_modules/moment/locale/zh-tw.js","webpack:///../src/tablemap.js","webpack:///../src/util.js","webpack:///../src/cellselection.js","webpack:///../src/copypaste.js","webpack:///../src/fixtables.js","webpack:///../src/tableview.js","webpack:///../src/columnresizing.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/markdown-it/index.js","webpack:///./node_modules/markdown-it/lib/common/entities.js","webpack:///./node_modules/mdurl/index.js","webpack:///./node_modules/uc.micro/properties/Any/regex.js","webpack:///./node_modules/uc.micro/categories/Cc/regex.js","webpack:///./node_modules/uc.micro/categories/Z/regex.js","webpack:///./node_modules/markdown-it/lib/common/html_re.js","webpack:///./node_modules/markdown-it/lib/rules_inline/strikethrough.js","webpack:///./node_modules/markdown-it/lib/rules_inline/emphasis.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///NextcloudMoment/webpack/universalModuleDefinition","webpack:///NextcloudMoment/webpack/bootstrap","webpack:///webpack:/NextcloudMoment/external \"moment\"","webpack:///webpack:/NextcloudMoment/external \"node-gettext\"","webpack:///webpack:/NextcloudMoment/external \"@nextcloud/l10n\"","webpack:///NextcloudMoment/lib/index.ts","webpack:///./node_modules/lowlight/lib/core.js","webpack:///./node_modules/lowlight/node_modules/highlight.js/lib/core.js","webpack:///./node_modules/fault/index.js","webpack:///./node_modules/format/format.js","webpack:///./node_modules/path-browserify/index.js","webpack:///./node_modules/markdown-it/lib/index.js","webpack:///./node_modules/mdurl/encode.js","webpack:///./node_modules/mdurl/decode.js","webpack:///./node_modules/mdurl/format.js","webpack:///./node_modules/mdurl/parse.js","webpack:///./node_modules/uc.micro/index.js","webpack:///./node_modules/uc.micro/categories/Cf/regex.js","webpack:///./node_modules/markdown-it/lib/helpers/index.js","webpack:///./node_modules/markdown-it/lib/helpers/parse_link_label.js","webpack:///./node_modules/markdown-it/lib/helpers/parse_link_destination.js","webpack:///./node_modules/markdown-it/lib/helpers/parse_link_title.js","webpack:///./node_modules/markdown-it/lib/renderer.js","webpack:///./node_modules/markdown-it/lib/parser_core.js","webpack:///./node_modules/markdown-it/lib/rules_core/normalize.js","webpack:///./node_modules/markdown-it/lib/rules_core/block.js","webpack:///./node_modules/markdown-it/lib/rules_core/inline.js","webpack:///./node_modules/markdown-it/lib/rules_core/linkify.js","webpack:///./node_modules/markdown-it/lib/rules_core/replacements.js","webpack:///./node_modules/markdown-it/lib/rules_core/smartquotes.js","webpack:///./node_modules/markdown-it/lib/rules_core/state_core.js","webpack:///./node_modules/markdown-it/lib/parser_block.js","webpack:///./node_modules/markdown-it/lib/rules_block/table.js","webpack:///./node_modules/markdown-it/lib/rules_block/code.js","webpack:///./node_modules/markdown-it/lib/rules_block/fence.js","webpack:///./node_modules/markdown-it/lib/rules_block/blockquote.js","webpack:///./node_modules/markdown-it/lib/rules_block/hr.js","webpack:///./node_modules/markdown-it/lib/rules_block/list.js","webpack:///./node_modules/markdown-it/lib/rules_block/reference.js","webpack:///./node_modules/markdown-it/lib/rules_block/heading.js","webpack:///./node_modules/markdown-it/lib/rules_block/lheading.js","webpack:///./node_modules/markdown-it/lib/rules_block/html_block.js","webpack:///./node_modules/markdown-it/lib/common/html_blocks.js","webpack:///./node_modules/markdown-it/lib/rules_block/paragraph.js","webpack:///./node_modules/markdown-it/lib/rules_block/state_block.js","webpack:///./node_modules/markdown-it/lib/parser_inline.js","webpack:///./node_modules/markdown-it/lib/rules_inline/text.js","webpack:///./node_modules/markdown-it/lib/rules_inline/newline.js","webpack:///./node_modules/markdown-it/lib/rules_inline/escape.js","webpack:///./node_modules/markdown-it/lib/rules_inline/backticks.js","webpack:///./node_modules/markdown-it/lib/rules_inline/link.js","webpack:///./node_modules/markdown-it/lib/rules_inline/image.js","webpack:///./node_modules/markdown-it/lib/rules_inline/autolink.js","webpack:///./node_modules/markdown-it/lib/rules_inline/html_inline.js","webpack:///./node_modules/markdown-it/lib/rules_inline/entity.js","webpack:///./node_modules/markdown-it/lib/rules_inline/balance_pairs.js","webpack:///./node_modules/markdown-it/lib/rules_inline/text_collapse.js","webpack:///./node_modules/markdown-it/lib/rules_inline/state_inline.js","webpack:///./node_modules/linkify-it/index.js","webpack:///./node_modules/linkify-it/lib/re.js","webpack:///./node_modules/punycode/punycode.js","webpack:///./node_modules/markdown-it/lib/presets/default.js","webpack:///./node_modules/markdown-it/lib/presets/zero.js","webpack:///./node_modules/markdown-it/lib/presets/commonmark.js","webpack:///./node_modules/markdown-it-task-lists/index.js","webpack:///./node_modules/proxy-polyfill/src/index.js","webpack:///./node_modules/proxy-polyfill/src/proxy.js","webpack:///../src/from_markdown.js","webpack:///../src/to_markdown.js"],"names":["module","exports","exec","error","global","require","shared","has","uid","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","WellKnownSymbolsStore","Symbol","createWellKnownSymbol","withoutSetter","name","check","it","Math","globalThis","window","self","Function","bind","toString","Object","prototype","isArray","val","call","isUndefined","isObject","isFunction","forEach","obj","fn","i","l","length","key","hasOwnProperty","isArrayBuffer","isBuffer","constructor","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isNumber","isDate","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","isStandardBrowserEnv","navigator","product","document","merge","result","assignValue","arguments","deepMerge","extend","a","b","thisArg","trim","str","replace","TypeError","String","fails","defineProperty","get","DESCRIPTORS","IE8_DOM_DEFINE","anObject","toPrimitive","nativeDefineProperty","f","O","P","Attributes","value","definePropertyModule","createPropertyDescriptor","object","getOwnPropertyDescriptor","createNonEnumerableProperty","redefine","setGlobal","copyConstructorProperties","isForced","options","source","target","targetProperty","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","stat","noTargetGet","forced","undefined","sham","generateFilePath","getRootUrl","linkToRemoteBase","version","allOptions","escape","noRewrite","_build","vars","r","encodeURIComponent","url","OC","params","file","isCore","link","app","type","encodeURI","inspectSource","InternalStateModule","getInternalState","enforceInternalState","enforce","TEMPLATE","split","unsafe","simple","enumerable","join","this","bus","console","ProxyBus","SimpleBus","toInteger","min","argument","requireObjectCoercible","normalizeComponent","scriptExports","render","staticRenderFns","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","_compiled","functional","_scopeId","context","$vnode","ssrContext","parent","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","_injectStyles","originalRender","h","existing","beforeCreate","concat","slice","IndexedObject","set","NATIVE_WEAK_MAP","objectHas","sharedKey","hiddenKeys","WeakMap","store","wmget","wmhas","wmset","metadata","STATE","getterFor","TYPE","state","path","aFunction","variable","namespace","method","bitmap","configurable","writable","ceil","floor","isNaN","client","headers","requesttoken","cancelableClient","CancelToken","Axios","isCancel","cache","thrower","METHOD_NAME","ACCESSORS","argument0","argument1","activeXDocument","defineProperties","enumBugKeys","html","documentCreateElement","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObject","domain","ActiveXObject","iframeDocument","iframe","write","close","temp","parentWindow","NullProtoObjectViaActiveX","style","display","appendChild","src","contentWindow","open","F","create","Properties","TO_STRING_TAG","wellKnownSymbol","TAG","input","PREFERRED_STRING","valueOf","that","c","apply","classof","propertyIsEnumerable","keys","id","postfix","random","MAX_SAFE_INTEGER","Number","SEMVER_SPEC_VERSION","MAX_LENGTH","MAX_SAFE_COMPONENT_LENGTH","$","createIteratorConstructor","getPrototypeOf","setPrototypeOf","setToStringTag","IS_PURE","Iterators","IteratorsCore","IteratorPrototype","BUGGY_SAFARI_ITERATORS","ITERATOR","returnThis","Iterable","NAME","IteratorConstructor","next","DEFAULT","IS_SET","FORCED","CurrentIteratorPrototype","methods","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","entries","values","proto","test","re1","re2","regexpFlags","stickyHelpers","nativeExec","RegExp","nativeReplace","patchedExec","UPDATES_LAST_INDEX_WRONG","lastIndex","UNSUPPORTED_Y","BROKEN_CARET","NPCG_INCLUDED","reCopy","match","re","sticky","flags","charsAdded","strCopy","indexOf","multiline","index","g","e","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","setTimeout","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","len","run","marker","runClearTimeout","Item","array","noop","nextTick","args","Array","push","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","useSourceMap","list","map","item","cssMapping","btoa","sourceMapping","sourceMap","base64","unescape","JSON","stringify","data","sourceURLs","sources","sourceRoot","cssWithMappingToString","modules","mediaQuery","dedupe","alreadyImportedModules","_i","listToStyles","parentId","styles","newStyles","part","css","media","parts","hasDocument","DEBUG","stylesInDom","head","getElementsByTagName","singletonElement","singletonCounter","isProduction","isOldIE","userAgent","toLowerCase","addStylesClient","_isProduction","_options","addStylesToDom","newList","mayRemove","domStyle","refs","j","addStyle","createStyleElement","styleElement","createElement","update","remove","querySelector","parentNode","removeChild","styleIndex","applyToSingletonTag","applyToTag","newObj","textStore","replaceText","replacement","filter","Boolean","styleSheet","cssText","cssNode","createTextNode","childNodes","insertBefore","setAttribute","ssrId","firstChild","TO_STRING_TAG_SUPPORT","toIndexedObject","addToUnscopables","defineIterator","setInternalState","iterated","kind","done","Arguments","propertyIsEnumerableModule","nativeGetOwnPropertyDescriptor","V8_VERSION","SPECIES","foo","feature","detection","normalize","POLYFILL","NATIVE","string","toObject","toLength","createProperty","arraySpeciesCreate","arrayMethodHasSpeciesSupport","IS_CONCAT_SPREADABLE","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","arg","k","E","A","n","Constructor","createMethod","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","$this","callbackfn","specificCreate","boundFunction","some","every","find","findIndex","originalArray","C","nativePropertyIsEnumerable","NASHORN_BUG","1","V","EXISTS","functionToString","mode","copyright","toAbsoluteIndex","IS_INCLUDES","el","fromIndex","includes","getOwnPropertySymbols","internalObjectKeys","v8","isArrayIteratorMethod","getIteratorMethod","callWithSafeIterationClosing","Result","stopped","iterable","AS_ENTRIES","IS_ITERATOR","iterator","iterFn","step","stop","classofRaw","CORRECT_ARGUMENTS","tag","tryGet","callee","CONVERT_TO_STRING","pos","first","second","S","position","size","charCodeAt","charAt","codeAt","assign","names","utils","encode","paramsSerializer","serializedParams","v","toISOString","hashmarkIndex","__CANCEL__","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","adapter","defaults","XMLHttpRequest","transformRequest","transformResponse","parse","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","common","settle","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","createError","config","Promise","resolve","reject","requestData","requestHeaders","request","auth","username","password","Authorization","fullPath","baseURL","toUpperCase","onreadystatechange","readyState","responseURL","responseHeaders","getAllResponseHeaders","response","responseType","responseText","statusText","onabort","onerror","ontimeout","timeoutErrorMessage","cookies","xsrfValue","withCredentials","read","setRequestHeader","onDownloadProgress","addEventListener","onUploadProgress","upload","cancelToken","promise","then","cancel","abort","send","enhanceError","message","code","config1","config2","valueFromConfig2Keys","mergeDeepPropertiesKeys","defaultToConfig2Keys","prop","axiosKeys","otherKeys","Cancel","$forEach","arrayMethodIsStrict","arrayMethodUsesToLength","STRICT_METHOD","USES_TO_LENGTH","debug","t","R","createToken","isGlobal","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","BUILDIDENTIFIER","MAINVERSION","PRERELEASE","BUILD","FULLPLAIN","MAINVERSIONLOOSE","PRERELEASELOOSE","LOOSEPLAIN","XRANGEIDENTIFIER","XRANGEIDENTIFIERLOOSE","GTLT","XRANGEPLAIN","XRANGEPLAINLOOSE","COERCE","LONETILDE","tildeTrimReplace","LONECARET","caretTrimReplace","comparatorTrimReplace","NODE_DEBUG","compareIdentifiers","SemVer","loose","includePrerelease","m","LOOSE","FULL","raw","major","minor","patch","prerelease","num","build","format","other","compareMain","comparePre","release","identifier","inc","PrototypeOfArrayIteratorPrototype","arrayIterator","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","aPossiblePrototype","setter","CORRECT_SETTER","__proto__","FREEZING","METADATA","isExtensible","setMetadata","objectID","weakData","meta","REQUIRED","fastKey","getWeakData","onFreeze","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","ignoreCase","dotAll","unicode","point","RegExpPrototype","nativeToString","NOT_GENERIC","INCORRECT_NAME","p","rf","DOMIterables","ArrayIteratorMethods","ArrayValues","COLLECTION_NAME","Collection","CollectionPrototype","fixRegExpWellKnownSymbolLogic","advanceStringIndex","regExpExec","max","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","REPLACE","maybeCallNative","reason","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","REPLACE_KEEPS_$0","UNSAFE_SUBSTITUTE","searchValue","replaceValue","replacer","regexp","res","rx","functionalReplace","fullUnicode","results","accumulatedResult","nextSourcePosition","matched","captures","namedCaptures","groups","replacerArgs","getSubstitution","tailPos","symbols","ch","capture","$indexOf","nativeIndexOf","NEGATIVE_ZERO","searchElement","getOwnPropertyNames","propertyKey","integer","$filter","HAS_SPECIES_SUPPORT","SAFE_CLOSING","called","iteratorWithReturn","from","SKIP_CLOSING","ITERATION_SUPPORT","dummy","Wrapper","NewTarget","NewTargetPrototype","ownKeys","getOwnPropertyDescriptorModule","objectKeys","getOwnPropertySymbolsModule","nativeAssign","B","symbol","chr","T","argumentsLength","getBuiltIn","UNSCOPABLES","ArrayPrototype","ENTRIES","returnMethod","CONSTRUCTOR_NAME","regexpExec","REPLACE_SUPPORTS_NAMED_GROUPS","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","nativeRegExpMethod","nativeMethod","arg2","forceStringMethod","stringMethod","regexMethod","getOwnPropertyNamesModule","mergeConfig","createInstance","defaultConfig","instance","axios","instanceConfig","all","promises","spread","default","InterceptorManager","dispatchRequest","interceptors","chain","interceptor","unshift","fulfilled","rejected","shift","getUri","handlers","use","eject","transformData","throwIfCancellationRequested","throwIfRequested","fns","normalizedName","isAxiosError","toJSON","description","number","fileName","lineNumber","columnNumber","stack","isAbsoluteURL","combineURLs","requestedURL","relativeURL","ignoreDuplicateOf","parsed","line","substr","originURL","msie","urlParsingNode","resolveURL","href","protocol","host","search","hash","hostname","port","pathname","location","requestURL","expires","secure","cookie","Date","toGMTString","decodeURIComponent","now","executor","resolvePromise","token","callback","arr","observer","observers","tokenElement","subscribe","packageJson","handler","event","er","numeric","anum","bnum","rcompareIdentifiers","Map","collection","collectionStrong","init","InternalMetadataModule","iterate","anInstance","checkCorrectnessOfIteration","inheritIfRequired","wrapper","IS_WEAK","ADDER","NativeConstructor","NativePrototype","exported","fixMethod","getConstructor","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","clear","setStrong","preventExtensions","redefineAll","setSpecies","internalStateGetterFor","last","define","previous","entry","getEntry","removed","prev","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","displayName","isAdmin","uidElement","displayNameElement","RE","s","factory","hookCallback","hooks","hasOwnProp","createUTC","locale","strict","createLocalOrUTC","utc","getParsingFlags","_pf","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","parsedParts","isNowValid","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","momentProperties","copyConfig","to","_isAMomentObject","_f","_l","_tzm","_isUTC","_offset","_locale","updateInProgress","Moment","updateOffset","isMoment","absFloor","toInt","argumentForCoercion","coercedNumber","isFinite","compareArrays","array1","array2","dontConvert","lengthDiff","abs","diffs","warn","msg","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","deprecations","deprecateSimple","mergeConfigs","parentConfig","childConfig","Locale","aliases","addUnitAlias","unit","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","zeroFill","targetLength","forceSign","absNumber","zerosToFill","pow","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","ordinal","func","localeData","formatMoment","expandFormat","mom","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","regexes","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","regexEscape","p1","p2","p3","p4","tokens","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","_a","daysInYear","year","isLeapYear","y","parseTwoDigitYear","parseInt","getSetYear","makeGetSet","keepTime","set$1","month","date","daysInMonth","x","modMonth","o","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","MONTHS_IN_FORMAT","defaultLocaleMonths","defaultLocaleMonthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","dayOfMonth","getSetMonth","defaultMonthsShortRegex","defaultMonthsRegex","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","sort","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","createDate","d","M","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","day","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","MM","yy","meridiemParse","locales","localeFamilies","normalizeLocale","loadLocale","oldLocale","_abbr","aliasedRequire","getSetGlobalLocale","getLocale","defineLocale","abbr","_config","parentLocale","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","currentDateArray","w","weekYear","weekdayOverflow","GG","W","createLocal","_week","curWeek","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","getDay","setUTCMinutes","getUTCMinutes","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","configFromStringAndFormat","untruncateYear","yearStr","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromRFC2822","monthStr","dayStr","hourStr","minuteStr","secondStr","parsedArray","weekdayStr","parsedInput","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromStringAndArray","createFromInputFallback","configFromString","minute","millisecond","configFromObject","configFromInput","isUTC","isObjectEmpty","prototypeMin","prototypeMax","pickBy","moments","ordering","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","parseFloat","isDurationValid","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","round","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","matches","cloneWithOffset","model","diff","clone","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","ret","diffRes","base","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","subtract","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","lang","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","addWeekYearFormatToken","getter","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetSecond","parseMs","getSetMillisecond","preParsePostFormat","time","formats","sod","startOf","calendarFormat","asFloat","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","getPrioritizedUnits","toArray","toDate","keepOffset","inspect","zone","isLocal","prefix","suffix","unix","creationData","isoWeeks","weekInfo","isoWeeksInYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","proto$1","get$1","field","listMonthsImpl","out","listWeekdaysImpl","localeSorted","_calendar","_longDateFormat","formatUpper","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","Y","D","toFixed","total","totalSign","ymSign","daysSign","hmsSign","proto$2","monthsFromDays","withSuffix","posNegDuration","relativeTime$1","toIsoString","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","DATE","TIME","TIME_SECONDS","TIME_MS","WEEK","MONTH","_hasOwnProperty","isValidEntityCode","fromCodePoint","surrogate1","surrogate2","fromCharCode","UNESCAPE_MD_RE","UNESCAPE_ALL_RE","DIGITAL_ENTITY_TEST_RE","entities","HTML_ESCAPE_TEST_RE","HTML_ESCAPE_REPLACE_RE","HTML_REPLACEMENTS","replaceUnsafeChar","REGEXP_ESCAPE_RE","UNICODE_PUNCT_RE","lib","mdurl","ucmicro","_class","unescapeMd","unescapeAll","escaped","entity","replaceEntityPattern","escapeHtml","arrayReplaceAt","newElements","isSpace","isWhiteSpace","isMdAsciiPunct","isPunctChar","escapeRE","normalizeReference","let","$from","$to","const","super","Transaction","doc","curSelection","selection","curSelectionFor","storedMarks","updated","steps","mapping","setSelection","RangeError","selectionSet","setStoredMarks","marks","ensureMarks","sameSet","addStoredMark","mark","addToSet","$head","removeStoredMark","removeFromSet","storedMarksSet","addStep","replaceSelection","replaceSelectionWith","node","inheritMarks","marksAcross","none","replaceWith","deleteSelection","insertText","text","schema","deleteRange","replaceRangeWith","Selection","near","setMeta","getMeta","isGeneric","_","scrollIntoView","scrolledIntoView","FieldDesc","desc","baseFields","topNodeType","createAndFill","tr","atStart","_marks","_old","$cursor","Configuration","plugins","fields","pluginsByKey","plugin","spec","EditorState","prototypeAccessors","applyTransaction","filterTransaction","ignore","rootTr","transactions","trs","newState","applyInner","seen","haveNew","appendTransaction","oldState","before","eq","newInstance","applyListeners","$config","reconfigure","pluginFields","fromJSON","json","markFromJSON","addApplyListener","removeApplyListener","found","splice","props","bindProps","createKey","getState","PluginKey","OrderedMap","newKey","addToStart","addToEnd","addBefore","place","without","prepend","append","orderedmap","Fragment","nodeSize","nodesBetween","nodeStart","child","end","start","descendants","textBetween","blockSeparator","leafText","separated","isText","isLeaf","isBlock","lastChild","sameMarkup","withText","cut","cutByIndex","replaceChild","current","copy","childCount","maybeChild","findDiffStart","childA","childB","inner","findDiffEnd","otherPos","posA","posB","iA","iB","same","minSize","retIndex","curPos","toStringInner","nodeFromJSON","fromArray","joined","nodes","attrs","compareDeep","ResolvedPos","parentOffset","depth","resolveDepth","indexAfter","textOffset","after","nodeAfter","dOff","nodeBefore","posAtIndex","Mark","main","inclusive","isInSet","$end","isInline","sharedDepth","blockRange","pred","inlineContent","NodeRange","sameParent","rem","resolveCached","resolveCache","cached","resolveCachePos","resolveCacheSize","prototypeAccessors$1","startIndex","endIndex","ContentMatch","validEnd","wrapCache","nodeTypes","stream","TokenStream","expr","parseExpr","err","nfa","labeled","explore","states","term","known","nullFrom","cmp","dfa","connect","compile","exprs","reduce","loop","edge","cur","edges","work","dead","hasRequiredAttrs","checkForDeadEnds","matchType","matchFragment","frag","defaultType","compatible","fillBefore","toEnd","types","finished","tp","findWrapping","computed","computeWrapping","active","via","reverse","contentMatch","edgeCount","scan","inline","pop","parseExprSeq","eat","parseExprSubscript","typeName","resolveName","parseExprAtom","parseExprRange","parseNum","tok","SyntaxError","DOMParser","rules","tags","rule","normalizeLists","dom","ParseContext","addAll","finish","parseSlice","Slice","maxOpen","matchTag","namespaceURI","matchesContext","getAttrs","matchStyle","schemaRules","insert","parseDOM","fromSchema","domParser","blockTags","address","article","aside","blockquote","canvas","div","dl","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","noscript","ol","pre","section","table","tfoot","ul","ignoreTags","script","listTags","wsOptionsFor","preserveWhitespace","NodeContext","pendingMarks","solid","activeMarks","fill","wrap","openEnd","applyPending","nextType","pending","allowsMarkType","markMayApply","parser","isOpen","topContext","topNode","topOptions","topMatch","findPositions","needsBlock","selector","msMatchesSelector","webkitMatchesSelector","mozMatchesSelector","markType","nodeType","top","addDOM","addTextNode","getAttribute","readStyles","parseStyles","addPendingMark","addElement","removePendingMark","nodeValue","domNodeBefore","previousSibling","nodeName","insertNode","findInText","findInside","prevItem","nextSibling","normalizeList","ruleFromNode","skip","closeParent","sync","oldNeedsBlock","leafFallback","addElementByRule","ownerDocument","enter","startIn","getContent","contentDOM","contentElement","findAround","findAtPoint","findPlace","route","cx","enterInner","block","textblockFromContext","closeExtra","preserveWS","ok","topOpen","currentPos","contains","compareDocumentPosition","textNode","option","useRoot","minDepth","$context","deflt","contentMatchAt","isTextblock","defaultAttrs","upto","level","lastIndexOf","DOMSerializer","gatherToDOM","toDOM","serializeFragment","fragment","createDocumentFragment","keep","rendered","spanning","markDOM","serializeMark","serializeNode","renderSpec","onContent","serializeNodeAndMarks","structure","xmlNS","tagName","space","createElementNS","setAttributeNS","innerContent","domSerializer","nodesFromSchema","marksFromSchema","DropCursorView","editorView","width","color","class","cursorPos","element","destroy","removeEventListener","prevState","updateOverlay","setCursor","rect","$pos","nodeRect","nodeDOM","getBoundingClientRect","bottom","left","right","coords","coordsAtPos","offsetParent","className","parentRect","body","getComputedStyle","pageXOffset","pageYOffset","height","scheduleRemoval","dragover","editable","posAtCoords","clientX","clientY","dragging","dragend","drop","dragleave","relatedTarget","GapCursor","valid","getBookmark","GapBookmark","isAtom","isolating","closedBefore","closedAfter","override","allowGapCursor","findFrom","mustMove","$cur","inside","isSelectable","visible","jsonID","_typeof","_classCallCheck","_defineProperties","_createClass","protoProps","staticProps","_defineProperty","enumerableOnly","sym","_objectSpread2","getOwnPropertyDescriptors","_inherits","subClass","superClass","_setPrototypeOf","_getPrototypeOf","_possibleConstructorReturn","ReferenceError","_assertThisInitialized","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","Proxy","_isNativeReflectConstruct","Super","_slicedToArray","_arrayWithHoles","_arr","_n","_e","_s","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_toConsumableArray","_arrayLikeToArray","_arrayWithoutHoles","iter","_iterableToArray","_nonIterableSpread","minLen","arr2","camelCase","word","ComponentView","component","_ref","editor","extension","view","decorations","getPos","isNode","isMark","getMarkPos","captureEvents","createDOM","vm","$refs","_this","Component","Vue","selected","updateAttrs","propsData","$mount","$el","updateComponentProps","_this2","_props","originalSilent","silent","_ref2","_ref3","newAttrs","transaction","removeMark","addMark","setNodeMarkup","dispatch","mutation","_this3","stopEvent","draggable","dragHandle","closest","isCopy","isPaste","isCut","isDrag","startsWith","posAtDOM","resolvedPos","getMarkRange","$destroy","Emitter","_callbacks","_len","_key","callbacks","cb","Extension","defaultOptions","ExtensionManager","extensions","bindEditor","extensionKeymaps","nodeMarkKeymaps","keymap","excludedExtensions","allowedExtensions","extensionInputRules","inputRules","nodeMarkInputRules","allInputRules","extensionPasteRules","pasteRules","nodeMarkPasteRules","allPasteRules","_ref4","commands","allCommands","focus","handle","_name","_value","_ref5","_ref6","commandName","commandValue","_ref7","changed","updateState","_ref8","allPlugins","_ref9","injectCSS","textContent","_Extension","_super","minMax","Node","Doc","_Node","Paragraph","setBlockType","group","Text","Editor","_Emitter","editorProps","autoFocus","emptyDocument","useBuiltInExtensions","disableInputRules","disablePasteRules","dropCursor","parseOptions","onInit","onTransaction","onUpdate","onFocus","onBlur","onPaste","onDrop","events","setOptions","focused","createExtensions","createNodes","createMarks","createSchema","createPlugins","keymaps","createKeymaps","createInputRules","createPasteRules","createView","createCommands","setActiveNodesAndMarks","builtInExtensions","Schema","createDocument","Backspace","undoInputRule","baseKeymap","attributes","tabindex","handleDOMEvents","blur","htmlString","parseFromString","_this4","EditorView","createState","handlePaste","handleDrop","_len2","_key2","dispatchTransaction","setProps","nodeViews","initNodeViews","_this5","getHTML","getJSON","docChanged","emitUpdate","_this6","_this$resolveSelectio","resolveSelection","_this$state","resolvedFrom","resolvedEnd","TextSelection","innerHTML","_this$state2","setContent","_this7","markIsActive","activeMarkAttrs","getMarkAttrs","activeNodes","nodeIsActive","getNodeAttrs","handlePlugins","docView","EditorContent","watch","immediate","$nextTick","setParentComponent","beforeDestroy","Menu","preventHide","mousedownHandler","handleClick","blurHandler","EditorMenuBar","registerPlugin","$scopedSlots","isActive","textRange","range","createRange","setEnd","setStart","singleRect","bias","rects","getClientRects","side","_view$docView$domFrom","domFromPos","_child","Menu$1","keepInBounds","focusHandler","hide","lastState","composing","_state$selection","box","sendUpdate","EditorMenuBubble","menu","$emit","unregisterPlugin","factor16","recoverIndex","MapResult","deleted","recover","StepMap","ranges","inverted","recoverOffset","mapResult","assoc","_map","oldIndex","newIndex","oldSize","newSize","touches","oldStart","newStart","invert","Mapping","maps","mirror","TransformError","appendMap","mirrors","setMirror","appendMapping","startSize","mirr","getMirror","appendMappingInverted","totalSize","inverse","corr","Transform","docs","mustOverride","maybeStep","failed","getMap","stepsByID","Step","_doc","_mapping","_other","stepType","stepClass","StepResult","fail","fromReplace","ReplaceStep","contentBetween","openStart","ReplaceAroundStep","gapFrom","gapTo","gap","inserted","insertAt","removeBetween","dist","canCut","canReplace","liftTarget","innerRange","around","outer","canReplaceWith","findWrappingOutside","innerMatch","findWrappingInside","withAttrs","canSplit","typesAfter","innerType","validContent","rest","baseType","canJoin","joinable","canAppend","joinPoint","dropPoint","pass","insertPos","mapFragment","mapped","lift","gapStart","gapEnd","splitting","wrappers","mapFrom","hasMarkup","canChangeType","clearIncompatible","startM","endM","nodeAt","newNode","typeAfter","AddMarkStep","oldSlice","RemoveMarkStep","fitsTrivially","added","removing","adding","newSet","toRemove","parentType","delSteps","allowed","Fitter","fit","replaceStep","delete","unplaced","frontier","placed","dropFromFragment","count","addToFragment","contentAt","closeNodeStart","contentAfterFits","compatibleContent","allowsMarks","invalidMarks","closeFragment","oldOpen","newOpen","coveredDepths","findFittable","placeNodes","openMore","dropNode","moveInline","mustMoveInline","placedSize","sliceDepth","frontierDepth","inject","openAtEnd","closeFrontierNode","openFrontierNode","taken","openEndCount","allowedMarks","findCloseLevel","dropInner","move","replaceRange","targetDepths","preferredTarget","defining","preferredTargetIndex","leftNodes","preferredDepth","openDepth","targetDepth","expand","startSteps","insertPoint","covered","InputRule","cutOff","stored","handleTextInput","compositionend","isInputRules","textBefore","transform","undoable","toUndo","wrappingInputRule","joinPredicate","wrapping","textblockTypeInputRule","$start","installedModules","__webpack_require__","moduleId","toStringTag","__esModule","ns","property","VTooltip","defaultTemplate","SCOPE_VERSION","defaultHtml","locals","___CSS_LOADER_API_IMPORT___","RopeSequence","leafAppend","leafPrepend","appendInner","Append","sliceInner","getInner","forEachInner","forEachInvertedInner","elt","Leaf","flatten","leftLen","ropeSequence","Branch","items","eventCount","popEvent","preserveItems","remap","remapping","remaining","addAfter","addTransform","histOptions","newItems","oldItems","lastItem","merged","cutPoint","DEPTH_OVERFLOW","mirrorPos","mirrorOffset","addMaps","rebased","rebasedTransform","rebasedCount","rebasedItems","newUntil","iRebased","newMaps","branch","emptyItemCount","compress","newItem","HistoryState","undone","prevRanges","prevTime","rangesFor","_from","_to","mapRanges","histTransaction","history","redo","mustPreserveItems","historyKey","newHist","historyState","cachedPreserveItems","cachedPreserveItemsPlugins","historyPreserveItems","closeHistoryKey","newGroupDelay","hist","historyTr","appended","newGroup","adjacent","isAdjacentTo","undo","undoDepth","redoDepth","asyncGeneratorStep","gen","_next","_throw","info","Blockquote","toggleWrap","paragraph","BulletList","toggleList","list_item","CodeBlock","toggleBlockType","getDecorations","blocks","findBlockNodes","startPos","parseNodes","classes","properties","children","low","highlightAuto","decoration","Decoration","DecorationSet","CodeBlockHighlight","languages","registerLanguage","decorationSet","oldNodeName","newNodeName","oldNodes","newNodes","HardBreak","command","chainCommands","exitCode","selectable","Heading","levels","HorizontalRule","nodeInputRule","IMAGE_INPUT_REGEX","Image","_match","alt","dataTransfer","files","images","preventDefault","coordinates","image","reader","FileReader","onload","readerEvent","readAsDataURL","ListItem","Enter","splitListItem","Tab","sinkListItem","liftListItem","SuggestionsPlugin","_ref2$matcher","char","allowSpaces","startOfLine","_ref2$appendText","appendText","_ref2$suggestionClass","suggestionClass","_ref2$command","_command","_ref2$items","_ref2$onEnter","onEnter","_ref2$onChange","onChange","_ref2$onExit","onExit","_ref2$onKeyDown","onKeyDown","_ref2$onFilter","onFilter","searchItems","query","Plugin$1","PluginKey$1","_update","regeneratorRuntime","_callee","moved","started","handleStart","handleChange","handleExit","decorationNode","virtualNode","_context","abrupt","decorationId","clientWidth","clientHeight","t0","t1","t2","t3","t4","t5","t7","t8","sent","t9","t10","t6","t11","t12","_x","_x2","_ref$char","_ref$allowSpaces","_ref$startOfLine","$position","escapedChar","textFrom","textTo","matchPrefix","handleKeyDown","_this$getState","editorState","_this$getState2","OrderedList","order","hasAttribute","TableNodes","tableNodes","tableGroup","cellContent","cellAttributes","background","getFromDOM","backgroundColor","setDOMAttr","Bold","_Mark","toggleMark","markInputRule","markPasteRule","fontWeight","Code","excludes","Italic","Link","updateMark","pasteRule","openOnClick","rel","HTMLAnchorElement","stopPropagation","Strike","Collaboration","getSendableSteps","debounce","sendable","sendableSteps","onSendable","clientID","delay","_this2$editor","getVersion","receiveTransaction","collab","History","Placeholder","emptyEditorClass","emptyNodeClass","emptyNodeText","showOnlyWhenEditable","showOnlyCurrent","isEditorEmpty","hasAnchor","isNodeEmpty","ie_edge","ie_upto10","ie_11up","mac","platform","ie","ie_version","documentMode","gecko","gecko_version","chrome","chrome_version","ios","android","webkit","documentElement","safari","vendor","webkit_version","domIndex","isEquivalentPosition","targetNode","targetOff","scanFor","atomElements","hasBlockDesc","contentEditable","pmViewDesc","selectionCollapsed","domSel","collapsed","isCollapsed","rangeCount","getRangeAt","keyEvent","keyCode","createEvent","initEvent","windowRect","getSide","clientRect","scrollRectIntoView","startDOM","scrollThreshold","someProp","scrollMargin","atTop","bounding","moveX","moveY","defaultView","scrollBy","startX","scrollLeft","startY","scrollTop","dX","dY","scrollStack","restoreScrollStack","dTop","preventScrollSupported","findOffsetInNode","coordsClosest","dxClosest","rowBot","rowTop","childIndex","dx","inRect","findOffsetInText","root","caretPositionFromPoint","caretRangeFromPoint","elementFromPoint","startI","targetKludge","outside","nearestDesc","posBefore","posAfter","posFromDOM","posFromCaret","posFromElement","posAtStart","border","rectBefore","rectAfter","flattenV","flattenH","withFlushedState","viewState","activeElement","maybeRTL","cachedState","cachedDir","cachedResult","endOfTextblock","sel","$anchor","nearest","boxes","endOfTextblockVertical","atEnd","getSelection","modify","oldRange","oldNode","focusNode","oldOff","focusOffset","oldBidiLevel","caretBidiLevel","domAfterPos","removeAllRanges","addRange","endOfTextblockHorizontal","ViewDesc","dirty","matchesWidget","matchesMark","matchesNode","matchesHack","beforePosition","parseRule","posBeforeChild","posAtEnd","localPosFromDOM","domBefore","domAfter","onlyNodes","getDesc","descAt","parseRange","fromOffset","toOffset","childBase","emptyChildAt","force","anchorDOM","headDOM","anchorNode","anchorOffset","domSelExtended","collapse","DOMException","ignoreMutation","contentLost","markDirty","startInside","endInside","markParentsDirty","nothing","WidgetViewDesc","widget","classList","ignoreSelection","CompositionViewDesc","textDOM","mut","oldValue","MarkViewDesc","custom","replaceNodes","NodeViewDesc","outerDeco","innerDeco","updateChildren","descObj","applyOuterDeco","CustomNodeViewDesc","TextViewDesc","reparseInView","sameOuterDeco","composition","localCompositionNode","updater","ViewTreeUpdater","deco","onWidget","onNode","forChild","decoIndex","restNode","parentIndex","widgets","compareSide","cutAt","iterDeco","insideNode","syncToMarks","placeWidget","findNodeMatch","updateNextNode","addNode","addTextblockHacks","destroyRest","protectLocalComposition","renderDescs","parentDOM","descs","written","childDOM","rm","trackWrites","oldCSS","listStyle","iosHacks","nearbyTextNode","textPos","childStart","findTextInFragment","compositionNodes","updateInner","updateOuterDeco","needsWrap","oldDOM","patchOuterDeco","computeOuterDeco","selectNode","deselectNode","removeAttribute","docViewDesc","pmIsDeco","inParent","BRHackViewDesc","OuterDecoLevel","noDeco","outerDOM","prevComputed","curComputed","curDOM","patchAttributes","prevList","curList","removeProperty","lockedNode","lock","preMatch","preMatched","preMatchOffset","moveSelectionBlock","$side","selectHorizontally","mods","nodePos","nodeLen","isIgnorable","skipIgnoredNodesLeft","moveNode","moveOffset","isBlockNode","setSelFocus","skipIgnoredNodesRight","domObserver","setCurSelection","selectVertically","beyond","stopNativeHorizontalDelete","nextNode","switchEditable","captureKeyDown","ctrlKey","metaKey","altKey","shiftKey","getMods","chromeDownArrowBug","getPreMatch","destroyBetween","maxKeep","markDesc","nextDOM","readDOMChange","typeOver","addedNodes","origin","lastSelectionTime","lastSelectionOrigin","newSel","selectionFromDOM","$before","preferredPos","preferredSide","from_","to_","lastKeyCode","startDoc","editableContent","parseBetween","compare","lastKeyCodeTime","change","endA","endB","adjust","findDiff","domChangeCount","nextSel","resolveNoCache","inlineChange","lastIOSEnter","old","$newStart","$newEnd","skipClosingAndOpening","$next","looksLikeJoin","suppressSelectionUpdates","markChange","$from1","chFrom","chTo","selectionToDOM","curMarks","prevMarks","isMarkChange","parsedSel","selectionBetween","fromEnd","mayOpen","serializeForClipboard","serializer","detachedDoc","wrapMap","parseFromClipboard","plainText","inCode","asText","metas","firstTag","readHTML","contextNode","sliceData","addContext","closeRange","closeSlice","lastWrap","inLast","addToSibling","sibling","withWrappers","closeRight","wrapped","normalizeSiblings","thead","tbody","caption","colgroup","col","td","th","_detachedDoc","implementation","createHTMLDocument","observeOptions","childList","characterData","characterDataOldValue","attributeOldValue","subtree","useCharData","SelectionState","DOMObserver","handleDOMChange","flushingSoon","MutationObserver","mutations","removedNodes","flushSoon","flush","currentSelection","onCharData","prevValue","onSelectionChange","suppressingSelectionUpdates","forceFlush","observe","connectSelection","take","takeRecords","disconnect","disconnectSelection","ignoreSelectionChange","container","commonAncestorContainer","hasSelection","registerMutation","brs","cssChecked","whiteSpace","checkCSS","attributeName","compareObjs","WidgetType","noSpec","span","oldOffset","InlineType","inclusiveStart","inclusiveEnd","is","NodeType","buildTree","predicate","findInner","childOff","mapInner","newLocal","onRemove","oldChildren","oldEnd","newEnd","dSize","mustRebuild","fromLocal","toLocal","childOffset","childNode","built","gather","mapAndGatherRemainingDecorations","byPos","mapChildren","addInner","baseOffset","takeSpansForNode","moveSpans","withoutNulls","removeInner","dec","localSet","DecorationGroup","removeOverlap","localsInner","members","spans","hasNulls","localStart","working","insertAhead","viewDecorations","cursorWrapper","sorted","newRefTop","refDOM","refTop","innerHeight","localRect","setActive","preventScroll","markItem","nodeItem","childAfter","endPos","rangeHasMark","nodeEqualsType","findSelectedNodeOfType","findParentNode","replaceParentNodeOfType","findParentNodeOfType","newTr","replaceNodeAtPos","replaceSelectedNode","isNodeSelection","cloneTr","NodeSelection","setTextSelection","nextSelection","isSelectableNode","shouldSelectNode","safeInsert","tryToReplace","hasPosition","$insertPos","isEmptyParagraph","canInsert","equalNodeType","removeNodeAtPos","tableNodeTypes","roles","PMNode","createCell","cellType","isRectSelected","TableMap","cells","selectedCells","transpose","column","convertTableNodeToArrayOfRows","tableNode","rows","rowIndex","rowCells","colIndex","cellPos","cell","convertArrayOfRowsToTableNode","arrayOfNodes","rowsPM","row","newCell","oldCell","moveRowInArrayOfRows","indexesOrigin","indexesTarget","rowsExtracted","positionOffset","directionOverride","checkInvalidMovements","errorMessage","originIndex","targets","findParentNodeClosestToPos","findParentDomRef","domAtPos","findDomRefAtPos","hasParentNode","findPositionOfNodeBefore","maybeSelection","descend","findChildren","findChildrenByType","findTable","isCellSelection","CellSelection","isTableSelected","getCellsInColumn","columnIndex","cellsInRect","acc","getCellsInRow","select","isRowSelection","findCellClosestToPos","selRect","cellsInFirstRow","cellsInLastRow","selectColumn","selectRow","cloneRowAt","rowPos","cloneRow","rowWidth","rowSpanCells","foundCells","filterCellsInRow","rowspan","setCellAttrs","removeColumnAt","removeTable","removeRowAt","findCellRectClosestToPos","findTableClosestToPos","getSelectionRangeInColumn","maybeEndIndex","indexes","maybeCells","firstSelectedColumnCells","firstRowCells","headCell","columnCells","getSelectionRangeInRow","firstSelectedRowCells","firstColumnCells","addColumn","originRowIndex","targetRowIndex","opts","tryToFit","indexesOriginRow","indexesTargetRow","newTable","moveTableRow","indexesOriginColumn","indexesTargetColumn","moveTableColumn","clonePreviousRow","cloneRowIndex","addRow","pmTableRect","cellTransform","rowsCount","colsCount","withHeaderRow","tableCell","tableHeader","tableRow","headerCells","wrapInList","listType","doJoin","outerRange","$insert","joinBefore","splitDepth","splitPos","doWrapInList","itemType","grandParent","keepItem","endOfList","liftToOuterList","indexBefore","liftOutOfList","nestedBefore","markEnd","markStart","matchStart","matchEnd","textStart","textEnd","getMarksBetween","excluded","transformPasted","isLink","splitToDefaultListItem","toggletype","isList","bullet_list","ordered_list","todo_list","parentList","wrapIn","Rebaseable","CollabState","unconfirmed","collabKey","unconfirmedFrom","clientIDs","collabState","ourID","ours","nUnconfirmed","over","rebaseSteps","newCollabState","mapSelectionBackward","between","_origins","Ruler","__rules__","__cache__","__find__","__compile__","chains","enabled","altName","at","opt","beforeName","ruleName","afterName","enable","ignoreInvalid","idx","enableOnly","disable","getRules","chainName","Token","nesting","markup","hidden","attrIndex","attrPush","attrData","attrSet","attrGet","attrJoin","8","9","10","12","13","16","17","18","20","27","32","33","34","35","36","37","38","39","40","44","45","46","59","61","91","92","106","107","108","109","110","111","144","145","160","161","162","163","164","165","173","186","187","188","189","190","191","192","219","220","221","222","229","48","49","50","51","52","53","54","55","56","57","brokenModifierNames","normalizeKeyName","ctrl","mod","modifiers","bindings","keydownHandler","baseName","keyName","isChar","direct","fromCode","withShift","matchHtmlRegExp","substring","moment","symbolMap","numberMap","pluralForm","plurals","pluralize","weekdaysParseExact","suffixes","5","70","80","2","7","3","4","100","6","30","60","90","relativeTimeWithPlural","forms","standalone","lastDigit","last2Digits","relativeTimeWithMutation","mutationTable","softMutation","lastNumber","translate","monthsParseExact","ll","lll","llll","plural","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","processRelativeTime","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","_calendarEl","monthsShortDot","numbersPast","numbersFuture","verbalNumber","monthsShortWithDots","monthsShortWithoutDots","weekEndings","0","isUpper","eifelerRegelAppliesToNumber","translateSingular","special","relativeTimeWithSingular","translator","words","correctGrammaticalCase","wordKey","relativeTimeMr","monthsNominative","monthsSubjective","numbersNouns","numberNoun","hundred","ten","one","numberAsNoun","processHoursFunction","readFromCache","addToCache","cachePos","Rect","problems","freshColWidth","colwidth","colspan","findCell","colCount","nextCell","axis","rectBetween","leftA","rightA","topA","bottomA","leftB","rightB","topB","bottomB","positionAt","rowStart","rowEnd","rowEndIndex","tableRole","hasRowSpan","rowNode","prevRow","findWidth","mapPos","colWidths","cellNode","colW","widthIndex","expectedPos","missing","tableMap","badWidths","colWidth","findBadColWidths","computeMap","cellAround","isInTable","selectionCell","$anchorCell","$headCell","role","cellNear","pointsAtCell","moveCellForward","inSameTable","$a","$b","setAttr","removeColSpan","addColSpan","columnIsHeader","headerCell","header_cell","tableChanged","rowSelection","isColSelection","colSelection","rowContent","cellRect","extraLeft","extraRight","forEachCell","anchorTop","headTop","anchorBot","headBot","anchorRect","headRect","anchorLeft","headLeft","anchorRight","headRight","anchorCell","CellBookmark","drawCellSelection","pastedCells","fitSlice","widths","ensureRectangular","clipCells","newWidth","newHeight","newRows","isolateHorizontal","cellTop","cellLeft","isolateVertical","updatePos","insertCells","tableStart","recomp","emptyHead","emptyRow","growTable","arrow","shiftArrow","deleteCellSelection","maybeSetSelection","atEndOfCell","$cell","baseContent","handleTripleClick","handleMouseDown","startEvent","startDOMCell","domInCell","setCellSelection","cellUnderMouse","starting","dirStr","mousePos","fixTablesKey","fixTables","tablePos","mustAdd","prob","tableNodeType","fixTable","changedDescendants","curSize","selectedRect","refColumn","addColumnBefore","addColumnAfter","removeColumn","mapStart","deleteColumn","rowIsHeader","refRow","addRowBefore","addRowAfter","removeRow","nextRow","newPos","deleteRow","isEmpty","mergeCells","indexTop","indexLeft","indexBottom","indexRight","cellsOverlapRectangle","mergedPos","mergedCell","splitCell","splitCellWithType","getCellType","cellWrapping","baseAttrs","lastCell","setCellAttr","isHeaderEnabledByType","cellPositions","toggleHeader","useDeprecatedLogic","deprecated_toggleHeader","isHeaderRowEnabled","isHeaderColumnEnabled","selectionStartsAt","cellsRect","newType","relativeCellPos","toggleHeaderRow","toggleHeaderColumn","toggleHeaderCell","goToNextCell","findNextCell","deleteTable","TableView","cellMinWidth","updateColumns","overrideCol","overrideValue","totalWidth","fixedWidth","hasWidth","cssWidth","minWidth","record","columnResizing","View","ResizeState","activeHandle","mousemove","handleWidth","lastColumnResizable","pluginState","domCellAround","edgeCell","updateHandle","handleMouseMove","mouseleave","handleMouseLeave","mousedown","domWidth","offsetWidth","currentColWidth","mapIndex","zeroes","updateColumnWidth","draggedWidth","setDragging","which","dragged","displayColumnWidth","startWidth","handleDecorations","setHandle","tableEditing","tableEditingKey","createSelectionBetween","allowTableNodeSelection","afterFrom","beforeTo","isCellBoundarySelection","fromCellBoundaryNode","toCellBoundaryNode","isTextSelectionAcrossCells","normalizeSelection","action","runtime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","_sent","dispatchException","tryCatch","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","invoke","__await","unwrapped","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iteratorMethod","isGeneratorFunction","genFun","ctor","awrap","async","skipTempReset","rootRecord","rval","exception","loc","caught","hasCatch","hasFinally","finallyEntry","complete","thrown","delegateYield","accidentalStrictMode","decode","open_tag","close_tag","HTML_TAG_RE","HTML_OPEN_CLOSE_TAG_RE","postProcess","delimiters","startDelim","endDelim","loneMarkers","tokenize","scanned","scanDelims","jump","can_open","can_close","curr","tokens_meta","isStrong","__webpack_amd_options__","gt","Gettext","LOCALES","addTranslations","setLocale","gettext","high","fault","highlight","secondBest","settings","subset","listLanguages","relevance","language","getLanguage","syntax","registerAlias","registerAliases","languageName","addText","tail","addKeyword","openNode","closeNode","addSublanguage","rootNode","classPrefix","closeAllNodes","finalize","toHTML","configure","__emitter","errorRaised","emitter","deepFreeze","freeze","objIsFunction","Response","escapeHTML","inherit","original","objects","nodeStream","_nodeStream","mergeStreams","highlighted","processed","nodeStack","selectStream","attr","emitsWrappingTags","HTMLRenderer","parseTree","walk","sublanguage","TokenTreeEmitter","builder","_walk","TokenTree","_collapse","C_NUMBER_RE","BACKSLASH_ESCAPE","begin","APOS_STRING_MODE","illegal","QUOTE_STRING_MODE","PHRASAL_WORDS_MODE","COMMENT","modeOptions","C_LINE_COMMENT_MODE","C_BLOCK_COMMENT_MODE","HASH_COMMENT_MODE","NUMBER_MODE","C_NUMBER_MODE","BINARY_NUMBER_MODE","CSS_NUMBER_MODE","NUMBER_RE","REGEXP_MODE","TITLE_MODE","UNDERSCORE_TITLE_MODE","METHOD_GUARD","MODES","IDENT_RE","UNDERSCORE_IDENT_RE","BINARY_NUMBER_RE","RE_STARTERS_RE","SHEBANG","beginShebang","binary","resp","ignoreMatch","END_SAME_AS_BEGIN","_beginMatch","COMMON_KEYWORDS","compileLanguage","langRe","case_insensitive","MultiRegex","matchIndexes","matchAt","countMatchGroups","terminators","matcherRe","regexps","backreferenceRe","numCaptures","matchData","ResumableMultiRegex","multiRegexes","regexIndex","addRule","getMatcher","skipIfhasPrecedingOrTrailingDot","compileMode","cmode","compiled","__beforeBegin","keywords","beginKeywords","kw_pattern","$pattern","rawKeywords","compiled_keywords","splitAndCompile","keywordList","keyword","pair","scoreForKeyword","compileKeywords","lexemes","keywordPatternRe","beginRe","endSameAsBegin","endsWithParent","endRe","terminator_end","illegalRe","variants","cached_variants","variant","dependencyOnParent","starts","expand_or_clone_mode","buildModeRegex","providedScore","commonKeyword","escape$1","inherit$1","nodeStream$1","mergeStreams$1","NO_MATCH","hljs","ArrayProto","SAFE_MODE","fixMarkupRe","LANGUAGE_NOT_FOUND","PLAINTEXT_LANGUAGE","disableAutodetect","noHighlightRe","languageDetectRe","tabReplace","useBR","shouldNotHighlight","ignoreIllegals","continuation","fire","_highlight","codeToHighlight","keywordData","matchText","processBuffer","subLanguage","mode_buffer","continuations","processSubLanguage","last_index","buf","keywordRelevance","processKeywords","startNewMode","doIgnore","lexeme","continueScanAtSamePosition","doBeginMatch","new_mode","excludeBegin","returnBegin","doEndMatch","matchPlusRemainder","end_mode","endOfMode","endsParent","returnEnd","excludeEnd","lastMatch","processLexeme","textBeforeMatch","badRule","iterations","md","processContinuations","considerAll","processedCount","illegalBy","sofar","languageSubset","justTextHighlightResult","autoDetection","second_best","fixMarkup","highlightBlock","blockLanguage","originalStream","resultNode","prevClassName","currentLang","resultLang","buildClassName","relavance","initHighlighting","querySelectorAll","aliasList","userOptions","initHighlightingOnLoad","languageDefinition","rawDefinition","requireLanguage","addPlugin","debugMode","safeMode","versionString","HLJS","formatter","EConstructor","FormattedError","eval","EvalError","reference","uri","URIError","fmt","precision","argIndex","leadingZero","nextArg","slurpNumber","digits","vsprintf","replacements","log","printf","normalizeArray","allowAboveRoot","up","xs","resolvedPath","resolvedAbsolute","isAbsolute","trailingSlash","paths","relative","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","hasRoot","matchedSlash","basename","ext","extname","startDot","startPart","preDotState","helpers","Renderer","ParserCore","ParserBlock","ParserInline","LinkifyIt","punycode","zero","commonmark","BAD_PROTO_RE","GOOD_DATA_RE","validateLink","RECODE_HOSTNAME_FOR","normalizeLink","toASCII","normalizeLinkText","toUnicode","MarkdownIt","presetName","core","renderer","linkify","presets","components","ruler","rules2","ruler2","missed","State","parseInline","inlineMode","renderInline","encodeCache","exclude","keepEscaped","nextCode","defaultChars","getEncodeCache","componentChars","decodeCache","getDecodeCache","seq","b1","b2","b3","b4","slashes","Url","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","hostlessProtocol","slashedProtocol","slashesDenoteHost","lowerProto","hec","simplePath","atSign","hostEnd","parseHost","ipv6Hostname","hostparts","newpart","validParts","notHost","bit","qm","Any","Cc","Cf","Z","parseLinkLabel","parseLinkDestination","parseLinkTitle","disableNested","prevPos","labelEnd","posMax","oldPos","skipToken","lines","default_rules","code_inline","slf","renderAttrs","code_block","fence","tmpAttrs","tmpToken","langName","langPrefix","renderInlineAsText","renderToken","hardbreak","xhtmlOut","softbreak","breaks","html_block","html_inline","nextToken","needLf","_rules","Core","NEWLINES_RE","NULL_RE","isLinkClose","currentToken","ln","lastPos","htmlLinkLevel","fullUrl","urlText","links","blockTokens","pretest","RARE_RE","SCOPED_ABBR_TEST_RE","SCOPED_ABBR_RE","SCOPED_ABBR","tm","replaceFn","replace_scoped","inlineTokens","inside_autolink","replace_rare","blkIdx","typographer","QUOTE_TEST_RE","QUOTE_RE","replaceAt","process_inlines","thisLevel","lastChar","nextChar","isLastPunctChar","isNextPunctChar","isLastWhiteSpace","isNextWhiteSpace","canOpen","canClose","isSingle","openQuote","closeQuote","OUTER","single","quotes","StateCore","startLine","endLine","hasEmptyLines","maxNesting","skipEmptyLines","sCount","blkIndent","tight","outTokens","lineMax","getLine","bMarks","eMarks","escapedSplit","escapes","backTicked","lastBackTick","lineText","nextLine","columns","columnCount","aligns","tableLines","tbodyLines","tShift","getLines","mem","haveEndMarker","skipChars","skipSpaces","adjustTab","initial","lastLineEmpty","oldBMarks","oldBSCount","oldIndent","oldParentType","oldSCount","oldTShift","spaceAfterMarker","terminate","terminatorRules","wasOutdented","oldLineMax","bsCount","cnt","skipBulletListMarker","skipOrderedListMarker","contentStart","indent","indentAfterMarker","isOrdered","itemLines","listLines","listTokIdx","markerCharCode","markerValue","oldListIndent","oldTight","posAfterMarker","prevEmptyEnd","isTerminatingParagraph","listIndent","markTightParagraphs","_endLine","destEndPos","destEndLineNo","label","references","skipSpacesBack","skipCharsBack","block_names","HTML_SEQUENCES","StateBlock","indent_found","ddIndent","keepLastLF","lineIndent","lineStart","_rules2","pushPending","isTerminatorChar","pmax","ESCAPED","labelStart","ref","parseReference","EMAIL_RE","AUTOLINK_RE","linkMatch","emailMatch","lc","isLetter","DIGITAL_RE","NAMED_RE","processDelimiters","closerIdx","openerIdx","closer","opener","minOpenerIdx","newMinOpenerIdx","isOddMatch","lastJump","openersBottom","StateInline","pendingLevel","_prev_delimiters","token_meta","canSplitWord","left_flanking","right_flanking","fuzzyLink","fuzzyEmail","fuzzyIP","defaultSchemas","validate","http","src_auth","src_host_port_strict","src_path","no_http","src_domain","src_domain_root","src_port","src_host_terminator","mailto","src_email_name","src_host_strict","tlds_default","__opts__","tlds","__tlds__","untpl","tpl","src_tlds","onCompile","__tlds_replaced__","src_xn","email_fuzzy","tpl_email_fuzzy","link_fuzzy","tpl_link_fuzzy","link_no_ip_fuzzy","tpl_link_no_ip_fuzzy","host_fuzzy_test","tpl_host_fuzzy_test","schemaError","__compiled__","__schemas__","isRegExp","createValidator","slist","schema_test","src_ZPCc","schema_search","__index__","__text_cache__","resetScanCache","Match","__last_index__","__schema__","createMatch","schemas","definition","ml","me","tld_pos","testSchemaAt","keepOld","src_Any","src_Cc","src_Z","src_P","src_ZCc","src_pseudo_letter","src_ip4","src_host","tpl_host_fuzzy","tpl_host_no_ip_fuzzy","tpl_host_fuzzy_strict","tpl_host_port_fuzzy_strict","tpl_host_port_no_ip_fuzzy_strict","freeExports","freeModule","freeGlobal","maxInt","regexPunycode","regexNonASCII","regexSeparators","errors","stringFromCharCode","mapDomain","ucs2decode","extra","counter","ucs2encode","digitToBasic","digit","flag","adapt","delta","numPoints","baseMinusTMin","basic","oldi","baseMinusT","codePoint","inputLength","handledCPCount","basicLength","q","currentValue","handledCPCountPlusOne","qMinusT","disableCheckboxes","useLabelWrapper","useLabelAfter","parentToken","targetLevel","isTodoItem","isParagraph","isListItem","startsWithTodoMarkdown","todoify","TokenConstructor","checkbox","disabledAttr","makeCheckbox","for","afterLabel","beginLabel","endLabel","labelAfter","scope","revocable","ProxyPolyfill","lastRevokeFn","validateProto","$Object","canCreateNullProtoObjects","objectCreate","throwRevoked","trap","unsafeHandler","proxy","isMethod","usingNew","propertyNames","propertyMap","real","prototypeOk","setProto","seal","horizontal_rule","heading","hard_break","em","strong","MarkdownParseState","tokenHandlers","noCloseToken","withoutTrailingNewline","noOp","maybeMerge","openMark","closeMark","parseTokens","toks","MarkdownParser","tokenizer","MarkdownSerializer","serialize","MarkdownSerializerState","renderContent","defaultMarkdownSerializer","wrapBlock","ensureNewLine","closeBlock","repeat","renderList","bullet","maxW","nStr","esc","quote","mixable","expelEnclosingWhitespace","_state","isPlainURL","_mark","backticksFor","ticks","delim","closed","inTightList","tightLists","flushClose","atBlank","delimMin","firstDelim","trailing","progress","leading","lead","trail","noEsc","markString","isTight","prevTight","getEnclosingWhitespace"],"mappings":"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","file":"vendors~editor.js?v=c51e52261b4945b61746","sourcesContent":["module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\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 createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n  if (!has(WellKnownSymbolsStore, name)) {\n    if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];\n    else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n  } return WellKnownSymbolsStore[name];\n};\n","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 no-undef\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  check(typeof self == 'object' && self) ||\n  check(typeof global == 'object' && global) ||\n  // eslint-disable-next-line no-new-func\n  Function('return this')();\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n  return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n  return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n    && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n  return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n  return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  var result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n  return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n  return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n  return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n  return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n  return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n  return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n  return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n  return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n  return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n  return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n  if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n                                           navigator.product === 'NativeScript' ||\n                                           navigator.product === 'NS')) {\n    return false;\n  }\n  return (\n    typeof window !== 'undefined' &&\n    typeof document !== 'undefined'\n  );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (var i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    for (var key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        fn.call(null, obj[key], key, obj);\n      }\n    }\n  }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (typeof result[key] === 'object' && typeof val === 'object') {\n      result[key] = merge(result[key], val);\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction deepMerge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (typeof result[key] === 'object' && typeof val === 'object') {\n      result[key] = deepMerge(result[key], val);\n    } else if (typeof val === 'object') {\n      result[key] = deepMerge({}, val);\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n  forEach(b, function assignValue(val, key) {\n    if (thisArg && typeof val === 'function') {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  });\n  return a;\n}\n\nmodule.exports = {\n  isArray: isArray,\n  isArrayBuffer: isArrayBuffer,\n  isBuffer: isBuffer,\n  isFormData: isFormData,\n  isArrayBufferView: isArrayBufferView,\n  isString: isString,\n  isNumber: isNumber,\n  isObject: isObject,\n  isUndefined: isUndefined,\n  isDate: isDate,\n  isFile: isFile,\n  isBlob: isBlob,\n  isFunction: isFunction,\n  isStream: isStream,\n  isURLSearchParams: isURLSearchParams,\n  isStandardBrowserEnv: isStandardBrowserEnv,\n  forEach: forEach,\n  merge: merge,\n  deepMerge: deepMerge,\n  extend: extend,\n  trim: trim\n};\n","var hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n  if (!isObject(it)) {\n    throw TypeError(String(it) + ' is not an object');\n  } return it;\n};\n","var fails = require('../internals/fails');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !fails(function () {\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\n\nvar nativeDefineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return nativeDefineProperty(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 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*/\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","export {\n    getRequestToken,\n    onRequestTokenUpdate\n} from './requesttoken'\nexport { getCurrentUser } from './user'\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\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  if (typeof value == 'function') {\n    if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key);\n    enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');\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 typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n","var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.github.io/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.github.io/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return Object(requireObjectCoercible(argument));\n};\n","module.exports = {};\n","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () {\n        injectStyles.call(\n          this,\n          (options.functional ? this.parent : this).$root.$options.shadowRoot\n        )\n      }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functional component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\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","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\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) {\n  var store = new WeakMap();\n  var wmget = store.get;\n  var wmhas = store.has;\n  var wmset = store.set;\n  set = function (it, metadata) {\n    wmset.call(store, it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return wmget.call(store, it) || {};\n  };\n  has = function (it) {\n    return wmhas.call(store, it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    createNonEnumerableProperty(it, STATE, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return objectHas(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return objectHas(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 path = require('../internals/path');\nvar global = require('../internals/global');\n\nvar aFunction = function (variable) {\n  return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n    : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\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","// `RequireObjectCoercible` abstract operation\n// https://tc39.github.io/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n  return it;\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.github.io/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n  return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","module.exports = {};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\n\nvar defineProperty = Object.defineProperty;\nvar cache = {};\n\nvar thrower = function (it) { throw it; };\n\nmodule.exports = function (METHOD_NAME, options) {\n  if (has(cache, METHOD_NAME)) return cache[METHOD_NAME];\n  if (!options) options = {};\n  var method = [][METHOD_NAME];\n  var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false;\n  var argument0 = has(options, 0) ? options[0] : thrower;\n  var argument1 = has(options, 1) ? options[1] : undefined;\n\n  return cache[METHOD_NAME] = !!method && !fails(function () {\n    if (ACCESSORS && !DESCRIPTORS) return true;\n    var O = { length: -1 };\n\n    if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower });\n    else O[1] = 1;\n\n    method.call(O, argument0, argument1);\n  });\n};\n","var anObject = require('../internals/an-object');\nvar defineProperties = 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    /* global ActiveXObject */\n    activeXDocument = document.domain && new ActiveXObject('htmlfile');\n  } catch (error) { /* ignore */ }\n  NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\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.github.io/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 : defineProperties(result, Properties);\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n  if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n    defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n  }\n};\n","var isObject = require('../internals/is-object');\n\n// `ToPrimitive` abstract operation\n// https://tc39.github.io/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n  if (!isObject(input)) return input;\n  var fn, val;\n  if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n  if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n  if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = false;\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 0: return function () {\n      return fn.call(that);\n    };\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.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\n  return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n  return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\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","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n  return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (key, value) {\n  try {\n    createNonEnumerableProperty(global, key, value);\n  } catch (error) {\n    global[key] = value;\n  } return value;\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","// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n  /* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\nmodule.exports = {\n  SEMVER_SPEC_VERSION,\n  MAX_LENGTH,\n  MAX_SAFE_INTEGER,\n  MAX_SAFE_COMPONENT_LENGTH\n}\n","'use strict';\nvar $ = require('../internals/export');\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 IS_PURE = require('../internals/is-pure');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\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 (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n        if (setPrototypeOf) {\n          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n        } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n          createNonEnumerableProperty(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#{values, @@iterator}.name in V8 / FF\n  if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n    INCORRECT_VALUES_NAME = true;\n    defaultIterator = function values() { return nativeIterator.call(this); };\n  }\n\n  // define iterator\n  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n    createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n  }\n  Iterators[NAME] = defaultIterator;\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  return methods;\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","'use strict';\nvar regexpFlags = require('./regexp-flags');\nvar stickyHelpers = require('./regexp-sticky-helpers');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n  var re1 = /a/;\n  var re2 = /b*/g;\n  nativeExec.call(re1, 'a');\n  nativeExec.call(re2, 'a');\n  return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.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;\n\nif (PATCH) {\n  patchedExec = function exec(str) {\n    var re = this;\n    var lastIndex, reCopy, match, i;\n    var sticky = UNSUPPORTED_Y && re.sticky;\n    var flags = regexpFlags.call(re);\n    var source = re.source;\n    var charsAdded = 0;\n    var strCopy = str;\n\n    if (sticky) {\n      flags = flags.replace('y', '');\n      if (flags.indexOf('g') === -1) {\n        flags += 'g';\n      }\n\n      strCopy = String(str).slice(re.lastIndex);\n      // Support anchored sticky behavior.\n      if (re.lastIndex > 0 && (!re.multiline || re.multiline && 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 = nativeExec.call(sticky ? reCopy : re, strCopy);\n\n    if (sticky) {\n      if (match) {\n        match.input = match.input.slice(charsAdded);\n        match[0] = match[0].slice(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      nativeReplace.call(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    return match;\n  };\n}\n\nmodule.exports = patchedExec;\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","\"use strict\";\n\n/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n  var list = []; // return the list of modules as css string\n\n  list.toString = function toString() {\n    return this.map(function (item) {\n      var content = cssWithMappingToString(item, useSourceMap);\n\n      if (item[2]) {\n        return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n      }\n\n      return content;\n    }).join('');\n  }; // import a list of modules into the list\n  // eslint-disable-next-line func-names\n\n\n  list.i = function (modules, mediaQuery, dedupe) {\n    if (typeof modules === 'string') {\n      // eslint-disable-next-line no-param-reassign\n      modules = [[null, modules, '']];\n    }\n\n    var alreadyImportedModules = {};\n\n    if (dedupe) {\n      for (var i = 0; i < this.length; i++) {\n        // eslint-disable-next-line prefer-destructuring\n        var id = this[i][0];\n\n        if (id != null) {\n          alreadyImportedModules[id] = true;\n        }\n      }\n    }\n\n    for (var _i = 0; _i < modules.length; _i++) {\n      var item = [].concat(modules[_i]);\n\n      if (dedupe && alreadyImportedModules[item[0]]) {\n        // eslint-disable-next-line no-continue\n        continue;\n      }\n\n      if (mediaQuery) {\n        if (!item[2]) {\n          item[2] = mediaQuery;\n        } else {\n          item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n        }\n      }\n\n      list.push(item);\n    }\n  };\n\n  return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n  var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n  var cssMapping = item[3];\n\n  if (!cssMapping) {\n    return content;\n  }\n\n  if (useSourceMap && typeof btoa === 'function') {\n    var sourceMapping = toComment(cssMapping);\n    var sourceURLs = cssMapping.sources.map(function (source) {\n      return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n    });\n    return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n  }\n\n  return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n  // eslint-disable-next-line no-undef\n  var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n  var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n  return \"/*# \".concat(data, \" */\");\n}","/**\n * Translates the list format produced by css-loader into something\n * easier to manipulate.\n */\nexport default function listToStyles (parentId, list) {\n  var styles = []\n  var newStyles = {}\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i]\n    var id = item[0]\n    var css = item[1]\n    var media = item[2]\n    var sourceMap = item[3]\n    var part = {\n      id: parentId + ':' + i,\n      css: css,\n      media: media,\n      sourceMap: sourceMap\n    }\n    if (!newStyles[id]) {\n      styles.push(newStyles[id] = { id: id, parts: [part] })\n    } else {\n      newStyles[id].parts.push(part)\n    }\n  }\n  return styles\n}\n","/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n  Modified by Evan You @yyx990803\n*/\n\nimport listToStyles from './listToStyles'\n\nvar hasDocument = typeof document !== 'undefined'\n\nif (typeof DEBUG !== 'undefined' && DEBUG) {\n  if (!hasDocument) {\n    throw new Error(\n    'vue-style-loader cannot be used in a non-browser environment. ' +\n    \"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\"\n  ) }\n}\n\n/*\ntype StyleObject = {\n  id: number;\n  parts: Array<StyleObjectPart>\n}\n\ntype StyleObjectPart = {\n  css: string;\n  media: string;\n  sourceMap: ?string\n}\n*/\n\nvar stylesInDom = {/*\n  [id: number]: {\n    id: number,\n    refs: number,\n    parts: Array<(obj?: StyleObjectPart) => void>\n  }\n*/}\n\nvar head = hasDocument && (document.head || document.getElementsByTagName('head')[0])\nvar singletonElement = null\nvar singletonCounter = 0\nvar isProduction = false\nvar noop = function () {}\nvar options = null\nvar ssrIdKey = 'data-vue-ssr-id'\n\n// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n// tags it will allow on a page\nvar isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\\b/.test(navigator.userAgent.toLowerCase())\n\nexport default function addStylesClient (parentId, list, _isProduction, _options) {\n  isProduction = _isProduction\n\n  options = _options || {}\n\n  var styles = listToStyles(parentId, list)\n  addStylesToDom(styles)\n\n  return function update (newList) {\n    var mayRemove = []\n    for (var i = 0; i < styles.length; i++) {\n      var item = styles[i]\n      var domStyle = stylesInDom[item.id]\n      domStyle.refs--\n      mayRemove.push(domStyle)\n    }\n    if (newList) {\n      styles = listToStyles(parentId, newList)\n      addStylesToDom(styles)\n    } else {\n      styles = []\n    }\n    for (var i = 0; i < mayRemove.length; i++) {\n      var domStyle = mayRemove[i]\n      if (domStyle.refs === 0) {\n        for (var j = 0; j < domStyle.parts.length; j++) {\n          domStyle.parts[j]()\n        }\n        delete stylesInDom[domStyle.id]\n      }\n    }\n  }\n}\n\nfunction addStylesToDom (styles /* Array<StyleObject> */) {\n  for (var i = 0; i < styles.length; i++) {\n    var item = styles[i]\n    var domStyle = stylesInDom[item.id]\n    if (domStyle) {\n      domStyle.refs++\n      for (var j = 0; j < domStyle.parts.length; j++) {\n        domStyle.parts[j](item.parts[j])\n      }\n      for (; j < item.parts.length; j++) {\n        domStyle.parts.push(addStyle(item.parts[j]))\n      }\n      if (domStyle.parts.length > item.parts.length) {\n        domStyle.parts.length = item.parts.length\n      }\n    } else {\n      var parts = []\n      for (var j = 0; j < item.parts.length; j++) {\n        parts.push(addStyle(item.parts[j]))\n      }\n      stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }\n    }\n  }\n}\n\nfunction createStyleElement () {\n  var styleElement = document.createElement('style')\n  styleElement.type = 'text/css'\n  head.appendChild(styleElement)\n  return styleElement\n}\n\nfunction addStyle (obj /* StyleObjectPart */) {\n  var update, remove\n  var styleElement = document.querySelector('style[' + ssrIdKey + '~=\"' + obj.id + '\"]')\n\n  if (styleElement) {\n    if (isProduction) {\n      // has SSR styles and in production mode.\n      // simply do nothing.\n      return noop\n    } else {\n      // has SSR styles but in dev mode.\n      // for some reason Chrome can't handle source map in server-rendered\n      // style tags - source maps in <style> only works if the style tag is\n      // created and inserted dynamically. So we remove the server rendered\n      // styles and inject new ones.\n      styleElement.parentNode.removeChild(styleElement)\n    }\n  }\n\n  if (isOldIE) {\n    // use singleton mode for IE9.\n    var styleIndex = singletonCounter++\n    styleElement = singletonElement || (singletonElement = createStyleElement())\n    update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)\n    remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)\n  } else {\n    // use multi-style-tag mode in all other cases\n    styleElement = createStyleElement()\n    update = applyToTag.bind(null, styleElement)\n    remove = function () {\n      styleElement.parentNode.removeChild(styleElement)\n    }\n  }\n\n  update(obj)\n\n  return function updateStyle (newObj /* StyleObjectPart */) {\n    if (newObj) {\n      if (newObj.css === obj.css &&\n          newObj.media === obj.media &&\n          newObj.sourceMap === obj.sourceMap) {\n        return\n      }\n      update(obj = newObj)\n    } else {\n      remove()\n    }\n  }\n}\n\nvar replaceText = (function () {\n  var textStore = []\n\n  return function (index, replacement) {\n    textStore[index] = replacement\n    return textStore.filter(Boolean).join('\\n')\n  }\n})()\n\nfunction applyToSingletonTag (styleElement, index, remove, obj) {\n  var css = remove ? '' : obj.css\n\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = replaceText(index, css)\n  } else {\n    var cssNode = document.createTextNode(css)\n    var childNodes = styleElement.childNodes\n    if (childNodes[index]) styleElement.removeChild(childNodes[index])\n    if (childNodes.length) {\n      styleElement.insertBefore(cssNode, childNodes[index])\n    } else {\n      styleElement.appendChild(cssNode)\n    }\n  }\n}\n\nfunction applyToTag (styleElement, obj) {\n  var css = obj.css\n  var media = obj.media\n  var sourceMap = obj.sourceMap\n\n  if (media) {\n    styleElement.setAttribute('media', media)\n  }\n  if (options.ssrId) {\n    styleElement.setAttribute(ssrIdKey, obj.id)\n  }\n\n  if (sourceMap) {\n    // https://developer.chrome.com/devtools/docs/javascript-debugging\n    // this makes source maps inside style tags work properly in Chrome\n    css += '\\n/*# sourceURL=' + sourceMap.sources[0] + ' */'\n    // http://stackoverflow.com/a/26603875\n    css += '\\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'\n  }\n\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = css\n  } else {\n    while (styleElement.firstChild) {\n      styleElement.removeChild(styleElement.firstChild)\n    }\n    styleElement.appendChild(document.createTextNode(css))\n  }\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.github.io/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n  redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.github.io/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n  setInternalState(this, {\n    type: ARRAY_ITERATOR,\n    target: toIndexedObject(iterated), // target\n    index: 0,                          // next index\n    kind: kind                         // kind\n  });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n  var state = getInternalState(this);\n  var target = state.target;\n  var kind = state.kind;\n  var index = state.index++;\n  if (!target || index >= target.length) {\n    state.target = undefined;\n    return { value: undefined, done: true };\n  }\n  if (kind == 'keys') return { value: index, done: false };\n  if (kind == 'values') return { value: target[index], done: false };\n  return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.github.io/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n  exec: exec\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return nativeGetOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\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","var fails = require('../internals/fails');\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    : typeof detection == 'function' ? 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","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\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';\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.github.io/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n  concat: function concat(arg) { // eslint-disable-line no-unused-vars\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 = toLength(E.length);\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","module.exports = function (it, Constructor, name) {\n  if (!(it instanceof Constructor)) {\n    throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n  } return it;\n};\n","var bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = [].push;\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` 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 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, 3);\n    var length = toLength(self.length);\n    var index = 0;\n    var create = specificCreate || arraySpeciesCreate;\n    var target = IS_MAP ? create($this, length) : IS_FILTER ? 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.call(target, value); // filter\n        } else if (IS_EVERY) return false;  // every\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.github.io/ecma262/#sec-array.prototype.foreach\n  forEach: createMethod(0),\n  // `Array.prototype.map` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.map\n  map: createMethod(1),\n  // `Array.prototype.filter` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.filter\n  filter: createMethod(2),\n  // `Array.prototype.some` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.some\n  some: createMethod(3),\n  // `Array.prototype.every` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.every\n  every: createMethod(4),\n  // `Array.prototype.find` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.find\n  find: createMethod(5),\n  // `Array.prototype.findIndex` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex\n  findIndex: createMethod(6)\n};\n","var isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.github.io/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n  var C;\n  if (isArray(originalArray)) {\n    C = originalArray.constructor;\n    // cross-realm fallback\n    if (typeof C == 'function' && (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 new (C === undefined ? Array : C)(length === 0 ? 0 : length);\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.github.io/ecma262/#sec-isarray\nmodule.exports = Array.isArray || function isArray(arg) {\n  return classof(arg) == 'Array';\n};\n","'use strict';\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n  var descriptor = getOwnPropertyDescriptor(this, V);\n  return !!descriptor && descriptor.enumerable;\n} : nativePropertyIsEnumerable;\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 store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n  store.inspectSource = function (it) {\n    return functionToString.call(it);\n  };\n}\n\nmodule.exports = store.inspectSource;\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.6.5',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\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 = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\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.github.io/ecma262/#sec-array.prototype.includes\n  includes: createMethod(true),\n  // `Array.prototype.indexOf` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n  indexOf: createMethod(false)\n};\n","exports.f = Object.getOwnPropertySymbols;\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.github.io/ecma262/#sec-object.keys\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  // Chrome 38 Symbol has incorrect toString conversion\n  // eslint-disable-next-line no-undef\n  return !String(Symbol());\n});\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\n    method.call(null, argument || function () { throw 1; }, 1);\n  });\n};\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n  match = v8.split('.');\n  version = match[0] + match[1];\n} else if (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 && +version;\n","var anObject = require('../internals/an-object');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\n\nvar Result = function (stopped, result) {\n  this.stopped = stopped;\n  this.result = result;\n};\n\nvar iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) {\n  var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1);\n  var iterator, iterFn, index, length, result, next, step;\n\n  if (IS_ITERATOR) {\n    iterator = iterable;\n  } else {\n    iterFn = getIteratorMethod(iterable);\n    if (typeof iterFn != 'function') throw TypeError('Target is not iterable');\n    // optimisation for array iterators\n    if (isArrayIteratorMethod(iterFn)) {\n      for (index = 0, length = toLength(iterable.length); length > index; index++) {\n        result = AS_ENTRIES\n          ? boundFunction(anObject(step = iterable[index])[0], step[1])\n          : boundFunction(iterable[index]);\n        if (result && result instanceof Result) return result;\n      } return new Result(false);\n    }\n    iterator = iterFn.call(iterable);\n  }\n\n  next = iterator.next;\n  while (!(step = next.call(iterator)).done) {\n    result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES);\n    if (typeof result == 'object' && result && result instanceof Result) return result;\n  } return new Result(false);\n};\n\niterate.stop = function (result) {\n  return new Result(true, result);\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\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' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n","var toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n  return function ($this, pos) {\n    var S = String(requireObjectCoercible($this));\n    var position = toInteger(pos);\n    var size = S.length;\n    var first, second;\n    if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n    first = S.charCodeAt(position);\n    return first < 0xD800 || first > 0xDBFF || position + 1 === size\n      || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n        ? CONVERT_TO_STRING ? S.charAt(position) : first\n        : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.codePointAt` method\n  // https://tc39.github.io/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 $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.github.io/ecma262/#sec-object.assign\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n  assign: assign\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a != 7;\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 has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\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) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~indexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n  return function wrap() {\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    return fn.apply(thisArg, args);\n  };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%40/gi, '@').\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n\n  var serializedParams;\n  if (paramsSerializer) {\n    serializedParams = paramsSerializer(params);\n  } else if (utils.isURLSearchParams(params)) {\n    serializedParams = params.toString();\n  } else {\n    var parts = [];\n\n    utils.forEach(params, function serialize(val, key) {\n      if (val === null || typeof val === 'undefined') {\n        return;\n      }\n\n      if (utils.isArray(val)) {\n        key = key + '[]';\n      } else {\n        val = [val];\n      }\n\n      utils.forEach(val, function parseValue(v) {\n        if (utils.isDate(v)) {\n          v = v.toISOString();\n        } else if (utils.isObject(v)) {\n          v = JSON.stringify(v);\n        }\n        parts.push(encode(key) + '=' + encode(v));\n      });\n    });\n\n    serializedParams = parts.join('&');\n  }\n\n  if (serializedParams) {\n    var hashmarkIndex = url.indexOf('#');\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n  'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n    headers['Content-Type'] = value;\n  }\n}\n\nfunction getDefaultAdapter() {\n  var adapter;\n  if (typeof XMLHttpRequest !== 'undefined') {\n    // For browsers use XHR adapter\n    adapter = require('./adapters/xhr');\n  } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n    // For node use HTTP adapter\n    adapter = require('./adapters/http');\n  }\n  return adapter;\n}\n\nvar defaults = {\n  adapter: getDefaultAdapter(),\n\n  transformRequest: [function transformRequest(data, headers) {\n    normalizeHeaderName(headers, 'Accept');\n    normalizeHeaderName(headers, 'Content-Type');\n    if (utils.isFormData(data) ||\n      utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n      return data.toString();\n    }\n    if (utils.isObject(data)) {\n      setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n      return JSON.stringify(data);\n    }\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    /*eslint no-param-reassign:0*/\n    if (typeof data === 'string') {\n      try {\n        data = JSON.parse(data);\n      } catch (e) { /* Ignore */ }\n    }\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  }\n};\n\ndefaults.headers = {\n  common: {\n    'Accept': 'application/json, text/plain, */*'\n  }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n  defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    var requestData = config.data;\n    var requestHeaders = config.headers;\n\n    if (utils.isFormData(requestData)) {\n      delete requestHeaders['Content-Type']; // Let the browser set it\n    }\n\n    var request = new XMLHttpRequest();\n\n    // HTTP basic authentication\n    if (config.auth) {\n      var username = config.auth.username || '';\n      var password = config.auth.password || '';\n      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n    }\n\n    var fullPath = buildFullPath(config.baseURL, config.url);\n    request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n    // Set the request timeout in MS\n    request.timeout = config.timeout;\n\n    // Listen for ready state\n    request.onreadystatechange = function handleLoad() {\n      if (!request || request.readyState !== 4) {\n        return;\n      }\n\n      // The request errored out and we didn't get a response, this will be\n      // handled by onerror instead\n      // With one exception: request that using file: protocol, most browsers\n      // will return status as 0 even though it's a successful request\n      if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n        return;\n      }\n\n      // Prepare the response\n      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n      var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n      var response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config: config,\n        request: request\n      };\n\n      settle(resolve, reject, response);\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle browser request cancellation (as opposed to a manual cancellation)\n    request.onabort = function handleAbort() {\n      if (!request) {\n        return;\n      }\n\n      reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(createError('Network Error', config, null, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n      if (config.timeoutErrorMessage) {\n        timeoutErrorMessage = config.timeoutErrorMessage;\n      }\n      reject(createError(timeoutErrorMessage, config, 'ECONNABORTED',\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Add xsrf header\n    // This is only done if running in a standard browser environment.\n    // Specifically not if we're in a web worker, or react-native.\n    if (utils.isStandardBrowserEnv()) {\n      var cookies = require('./../helpers/cookies');\n\n      // Add xsrf header\n      var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n        cookies.read(config.xsrfCookieName) :\n        undefined;\n\n      if (xsrfValue) {\n        requestHeaders[config.xsrfHeaderName] = xsrfValue;\n      }\n    }\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n          // Remove Content-Type if data is undefined\n          delete requestHeaders[key];\n        } else {\n          // Otherwise add header to the request\n          request.setRequestHeader(key, val);\n        }\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (!utils.isUndefined(config.withCredentials)) {\n      request.withCredentials = !!config.withCredentials;\n    }\n\n    // Add responseType to request if needed\n    if (config.responseType) {\n      try {\n        request.responseType = config.responseType;\n      } catch (e) {\n        // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n        // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n        if (config.responseType !== 'json') {\n          throw e;\n        }\n      }\n    }\n\n    // Handle progress if needed\n    if (typeof config.onDownloadProgress === 'function') {\n      request.addEventListener('progress', config.onDownloadProgress);\n    }\n\n    // Not all browsers support upload events\n    if (typeof config.onUploadProgress === 'function' && request.upload) {\n      request.upload.addEventListener('progress', config.onUploadProgress);\n    }\n\n    if (config.cancelToken) {\n      // Handle cancellation\n      config.cancelToken.promise.then(function onCanceled(cancel) {\n        if (!request) {\n          return;\n        }\n\n        request.abort();\n        reject(cancel);\n        // Clean up request\n        request = null;\n      });\n    }\n\n    if (requestData === undefined) {\n      requestData = null;\n    }\n\n    // Send the request\n    request.send(requestData);\n  });\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n  var error = new Error(message);\n  return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  var config = {};\n\n  var valueFromConfig2Keys = ['url', 'method', 'params', 'data'];\n  var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy'];\n  var defaultToConfig2Keys = [\n    'baseURL', 'url', 'transformRequest', 'transformResponse', 'paramsSerializer',\n    'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n    'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress',\n    'maxContentLength', 'validateStatus', 'maxRedirects', 'httpAgent',\n    'httpsAgent', 'cancelToken', 'socketPath'\n  ];\n\n  utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n    if (typeof config2[prop] !== 'undefined') {\n      config[prop] = config2[prop];\n    }\n  });\n\n  utils.forEach(mergeDeepPropertiesKeys, function mergeDeepProperties(prop) {\n    if (utils.isObject(config2[prop])) {\n      config[prop] = utils.deepMerge(config1[prop], config2[prop]);\n    } else if (typeof config2[prop] !== 'undefined') {\n      config[prop] = config2[prop];\n    } else if (utils.isObject(config1[prop])) {\n      config[prop] = utils.deepMerge(config1[prop]);\n    } else if (typeof config1[prop] !== 'undefined') {\n      config[prop] = config1[prop];\n    }\n  });\n\n  utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n    if (typeof config2[prop] !== 'undefined') {\n      config[prop] = config2[prop];\n    } else if (typeof config1[prop] !== 'undefined') {\n      config[prop] = config1[prop];\n    }\n  });\n\n  var axiosKeys = valueFromConfig2Keys\n    .concat(mergeDeepPropertiesKeys)\n    .concat(defaultToConfig2Keys);\n\n  var otherKeys = Object\n    .keys(config2)\n    .filter(function filterAxiosKeys(key) {\n      return axiosKeys.indexOf(key) === -1;\n    });\n\n  utils.forEach(otherKeys, function otherKeysDefaultToConfig2(prop) {\n    if (typeof config2[prop] !== 'undefined') {\n      config[prop] = config2[prop];\n    } else if (typeof config1[prop] !== 'undefined') {\n      config[prop] = config1[prop];\n    }\n  });\n\n  return config;\n};\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n  this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n  return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","'use strict';\nvar $ = require('../internals/export');\nvar forEach = require('../internals/array-for-each');\n\n// `Array.prototype.forEach` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.foreach\n$({ target: 'Array', proto: true, forced: [].forEach != forEach }, {\n  forEach: forEach\n});\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.github.io/ecma262/#sec-array.prototype.foreach\nmodule.exports = (!STRICT_METHOD || !USES_TO_LENGTH) ? function forEach(callbackfn /* , thisArg */) {\n  return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n} : [].forEach;\n","const { MAX_SAFE_COMPONENT_LENGTH } = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst src = exports.src = []\nconst t = exports.t = {}\nlet R = 0\n\nconst createToken = (name, value, isGlobal) => {\n  const index = R++\n  debug(index, value)\n  t[name] = index\n  src[index] = value\n  re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '[0-9]+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*')\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+')\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups.  The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:${src[t.PRERELEASE]})?${\n                     src[t.BUILD]}?` +\n                   `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:${src[t.PRERELEASELOOSE]})?${\n                          src[t.BUILD]}?` +\n                        `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCE', `${'(^|[^\\\\d])' +\n              '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n              `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s+-\\\\s+` +\n                   `(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s+-\\\\s+` +\n                        `(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\.0\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\.0\\.0-0\\\\s*$')\n","const debug = (\n  typeof process === 'object' &&\n  process.env &&\n  process.env.NODE_DEBUG &&\n  /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n  : () => {}\n\nmodule.exports = debug\n","const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { re, t } = require('../internal/re')\n\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n  constructor (version, options) {\n    if (!options || typeof options !== 'object') {\n      options = {\n        loose: !!options,\n        includePrerelease: false\n      }\n    }\n    if (version instanceof SemVer) {\n      if (version.loose === !!options.loose &&\n          version.includePrerelease === !!options.includePrerelease) {\n        return version\n      } else {\n        version = version.version\n      }\n    } else if (typeof version !== 'string') {\n      throw new TypeError(`Invalid Version: ${version}`)\n    }\n\n    if (version.length > MAX_LENGTH) {\n      throw new TypeError(\n        `version is longer than ${MAX_LENGTH} characters`\n      )\n    }\n\n    debug('SemVer', version, options)\n    this.options = options\n    this.loose = !!options.loose\n    // this isn't actually relevant for versions, but keep it so that we\n    // don't run into trouble passing this.options around.\n    this.includePrerelease = !!options.includePrerelease\n\n    const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n    if (!m) {\n      throw new TypeError(`Invalid Version: ${version}`)\n    }\n\n    this.raw = version\n\n    // these are actually numbers\n    this.major = +m[1]\n    this.minor = +m[2]\n    this.patch = +m[3]\n\n    if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n      throw new TypeError('Invalid major version')\n    }\n\n    if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n      throw new TypeError('Invalid minor version')\n    }\n\n    if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n      throw new TypeError('Invalid patch version')\n    }\n\n    // numberify any prerelease numeric ids\n    if (!m[4]) {\n      this.prerelease = []\n    } else {\n      this.prerelease = m[4].split('.').map((id) => {\n        if (/^[0-9]+$/.test(id)) {\n          const num = +id\n          if (num >= 0 && num < MAX_SAFE_INTEGER) {\n            return num\n          }\n        }\n        return id\n      })\n    }\n\n    this.build = m[5] ? m[5].split('.') : []\n    this.format()\n  }\n\n  format () {\n    this.version = `${this.major}.${this.minor}.${this.patch}`\n    if (this.prerelease.length) {\n      this.version += `-${this.prerelease.join('.')}`\n    }\n    return this.version\n  }\n\n  toString () {\n    return this.version\n  }\n\n  compare (other) {\n    debug('SemVer.compare', this.version, this.options, other)\n    if (!(other instanceof SemVer)) {\n      if (typeof other === 'string' && other === this.version) {\n        return 0\n      }\n      other = new SemVer(other, this.options)\n    }\n\n    if (other.version === this.version) {\n      return 0\n    }\n\n    return this.compareMain(other) || this.comparePre(other)\n  }\n\n  compareMain (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    return (\n      compareIdentifiers(this.major, other.major) ||\n      compareIdentifiers(this.minor, other.minor) ||\n      compareIdentifiers(this.patch, other.patch)\n    )\n  }\n\n  comparePre (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    // NOT having a prerelease is > having one\n    if (this.prerelease.length && !other.prerelease.length) {\n      return -1\n    } else if (!this.prerelease.length && other.prerelease.length) {\n      return 1\n    } else if (!this.prerelease.length && !other.prerelease.length) {\n      return 0\n    }\n\n    let i = 0\n    do {\n      const a = this.prerelease[i]\n      const b = other.prerelease[i]\n      debug('prerelease compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  compareBuild (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    let i = 0\n    do {\n      const a = this.build[i]\n      const b = other.build[i]\n      debug('prerelease compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  // preminor will bump the version up to the next minor release, and immediately\n  // down to pre-release. premajor and prepatch work the same way.\n  inc (release, identifier) {\n    switch (release) {\n      case 'premajor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor = 0\n        this.major++\n        this.inc('pre', identifier)\n        break\n      case 'preminor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor++\n        this.inc('pre', identifier)\n        break\n      case 'prepatch':\n        // If this is already a prerelease, it will bump to the next version\n        // drop any prereleases that might already exist, since they are not\n        // relevant at this point.\n        this.prerelease.length = 0\n        this.inc('patch', identifier)\n        this.inc('pre', identifier)\n        break\n      // If the input is a non-prerelease version, this acts the same as\n      // prepatch.\n      case 'prerelease':\n        if (this.prerelease.length === 0) {\n          this.inc('patch', identifier)\n        }\n        this.inc('pre', identifier)\n        break\n\n      case 'major':\n        // If this is a pre-major version, bump up to the same major version.\n        // Otherwise increment major.\n        // 1.0.0-5 bumps to 1.0.0\n        // 1.1.0 bumps to 2.0.0\n        if (\n          this.minor !== 0 ||\n          this.patch !== 0 ||\n          this.prerelease.length === 0\n        ) {\n          this.major++\n        }\n        this.minor = 0\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'minor':\n        // If this is a pre-minor version, bump up to the same minor version.\n        // Otherwise increment minor.\n        // 1.2.0-5 bumps to 1.2.0\n        // 1.2.1 bumps to 1.3.0\n        if (this.patch !== 0 || this.prerelease.length === 0) {\n          this.minor++\n        }\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'patch':\n        // If this is not a pre-release version, it will increment the patch.\n        // If it is a pre-release it will bump up to the same patch version.\n        // 1.2.0-5 patches to 1.2.0\n        // 1.2.0 patches to 1.2.1\n        if (this.prerelease.length === 0) {\n          this.patch++\n        }\n        this.prerelease = []\n        break\n      // This probably shouldn't be used publicly.\n      // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n      case 'pre':\n        if (this.prerelease.length === 0) {\n          this.prerelease = [0]\n        } else {\n          let i = this.prerelease.length\n          while (--i >= 0) {\n            if (typeof this.prerelease[i] === 'number') {\n              this.prerelease[i]++\n              i = -2\n            }\n          }\n          if (i === -1) {\n            // didn't increment anything\n            this.prerelease.push(0)\n          }\n        }\n        if (identifier) {\n          // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n          // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n          if (this.prerelease[0] === identifier) {\n            if (isNaN(this.prerelease[1])) {\n              this.prerelease = [identifier, 0]\n            }\n          } else {\n            this.prerelease = [identifier, 0]\n          }\n        }\n        break\n\n      default:\n        throw new Error(`invalid increment argument: ${release}`)\n    }\n    this.format()\n    this.raw = this.version\n    return this\n  }\n}\n\nmodule.exports = SemVer\n","'use strict';\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\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\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\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\nif (IteratorPrototype == undefined) IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif (!IS_PURE && !has(IteratorPrototype, ITERATOR)) {\n  createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n  IteratorPrototype: IteratorPrototype,\n  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","var has = require('../internals/has');\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 ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectPrototype : null;\n};\n","var anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n  var CORRECT_SETTER = false;\n  var test = {};\n  var setter;\n  try {\n    setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n    setter.call(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.call(O, proto);\n    else O.__proto__ = proto;\n    return O;\n  };\n}() : undefined);\n","var hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar has = require('../internals/has');\nvar defineProperty = require('../internals/object-define-property').f;\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar METADATA = uid('meta');\nvar id = 0;\n\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\n\nvar setMetadata = function (it) {\n  defineProperty(it, METADATA, { value: {\n    objectID: 'O' + ++id, // object ID\n    weakData: {}          // weak collections IDs\n  } });\n};\n\nvar fastKey = function (it, create) {\n  // return a primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, METADATA)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMetadata(it);\n  // return object ID\n  } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n  if (!has(it, METADATA)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMetadata(it);\n  // return the store of weak collections IDs\n  } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZING && meta.REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it);\n  return it;\n};\n\nvar meta = module.exports = {\n  REQUIRED: false,\n  fastKey: fastKey,\n  getWeakData: getWeakData,\n  onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\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","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.github.io/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';\nvar charAt = require('../internals/string-multibyte').charAt;\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.github.io/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n  setInternalState(this, {\n    type: STRING_ITERATOR,\n    string: String(iterated),\n    index: 0\n  });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.github.io/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","'use strict';\nvar redefine = require('../internals/redefine');\nvar anObject = require('../internals/an-object');\nvar fails = require('../internals/fails');\nvar flags = require('../internals/regexp-flags');\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar nativeToString = RegExpPrototype[TO_STRING];\n\nvar NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = nativeToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n  redefine(RegExp.prototype, TO_STRING, function toString() {\n    var R = anObject(this);\n    var p = String(R.source);\n    var rf = R.flags;\n    var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf);\n    return '/' + p + '/' + f;\n  }, { unsafe: true });\n}\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  var Collection = global[COLLECTION_NAME];\n  var CollectionPrototype = Collection && Collection.prototype;\n  if (CollectionPrototype) {\n    // some Chrome versions have non-configurable methods on DOMTokenList\n    if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n      createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n    } catch (error) {\n      CollectionPrototype[ITERATOR] = ArrayValues;\n    }\n    if (!CollectionPrototype[TO_STRING_TAG]) {\n      createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n    }\n    if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n      // some Chrome versions have non-configurable methods on DOMTokenList\n      if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n        createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n      } catch (error) {\n        CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n      }\n    }\n  }\n}\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n  return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) {\n  var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE;\n  var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0;\n  var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n  return [\n    // `String.prototype.replace` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n    function replace(searchValue, replaceValue) {\n      var O = requireObjectCoercible(this);\n      var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];\n      return replacer !== undefined\n        ? replacer.call(searchValue, O, replaceValue)\n        : nativeReplace.call(String(O), searchValue, replaceValue);\n    },\n    // `RegExp.prototype[@@replace]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n    function (regexp, replaceValue) {\n      if (\n        (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) ||\n        (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1)\n      ) {\n        var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);\n        if (res.done) return res.value;\n      }\n\n      var rx = anObject(regexp);\n      var S = String(this);\n\n      var functionalReplace = typeof replaceValue === 'function';\n      if (!functionalReplace) replaceValue = String(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        results.push(result);\n        if (!global) break;\n\n        var matchStr = String(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 = String(result[0]);\n        var position = max(min(toInteger(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++) captures.push(maybeToString(result[j]));\n        var namedCaptures = result.groups;\n        if (functionalReplace) {\n          var replacerArgs = [matched].concat(captures, position, S);\n          if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n          var replacement = String(replaceValue.apply(undefined, replacerArgs));\n        } else {\n          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n        }\n        if (position >= nextSourcePosition) {\n          accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n          nextSourcePosition = position + matched.length;\n        }\n      }\n      return accumulatedResult + S.slice(nextSourcePosition);\n    }\n  ];\n\n  // https://tc39.github.io/ecma262/#sec-getsubstitution\n  function getSubstitution(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 nativeReplace.call(replacement, symbols, function (match, ch) {\n      var capture;\n      switch (ch.charAt(0)) {\n        case '$': return '$';\n        case '&': return matched;\n        case '`': return str.slice(0, position);\n        case \"'\": return str.slice(tailPos);\n        case '<':\n          capture = namedCaptures[ch.slice(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 ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n            return match;\n          }\n          capture = captures[n - 1];\n      }\n      return capture === undefined ? '' : capture;\n    });\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $indexOf = require('../internals/array-includes').indexOf;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar nativeIndexOf = [].indexOf;\n\nvar NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('indexOf');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });\n\n// `Array.prototype.indexOf` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n$({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD || !USES_TO_LENGTH }, {\n  indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n    return NEGATIVE_ZERO\n      // convert -0 to +0\n      ? nativeIndexOf.apply(this, arguments) || 0\n      : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined);\n  }\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.github.io/ecma262/#sec-object.getownpropertynames\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n  var propertyKey = toPrimitive(key);\n  if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n  else object[propertyKey] = value;\n};\n","var toInteger = require('../internals/to-integer');\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 = toInteger(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","module.exports = function (it) {\n  if (typeof it != 'function') {\n    throw TypeError(String(it) + ' is not a function');\n  } return it;\n};\n","var classof = require('../internals/classof');\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 it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n// Edge 14- issue\nvar USES_TO_LENGTH = arrayMethodUsesToLength('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n  filter: function filter(callbackfn /* , thisArg */) {\n    return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\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 no-throw-literal\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 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    typeof (NewTarget = dummy.constructor) == 'function' &&\n    NewTarget !== Wrapper &&\n    isObject(NewTargetPrototype = NewTarget.prototype) &&\n    NewTargetPrototype !== Wrapper.prototype\n  ) setPrototypeOf($this, NewTargetPrototype);\n  return $this;\n};\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 has = require('../internals/has');\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) {\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 (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n  }\n};\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\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\nvar nativeAssign = Object.assign;\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.github.io/ecma262/#sec-object.assign\nmodule.exports = !nativeAssign || fails(function () {\n  // should have correct order of operations (Edge bug)\n  if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(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 no-undef\n  var symbol = Symbol();\n  var alphabet = 'abcdefghijklmnopqrst';\n  A[symbol] = 7;\n  alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n  return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\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 ? objectKeys(S).concat(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 || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n    }\n  } return T;\n} : nativeAssign;\n","var NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n  // eslint-disable-next-line no-undef\n  && !Symbol.sham\n  // eslint-disable-next-line no-undef\n  && typeof Symbol.iterator == 'symbol';\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\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.github.io/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 DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperties\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\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++], Properties[key]);\n  return O;\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\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) {\n  var TO_STRING_TAG = NAME + ' Iterator';\n  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n  Iterators[TO_STRING_TAG] = returnThis;\n  return IteratorConstructor;\n};\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 anObject = require('../internals/an-object');\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  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (error) {\n    var returnMethod = iterator['return'];\n    if (returnMethod !== undefined) anObject(returnMethod.call(iterator));\n    throw error;\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","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar regexpExec = require('../internals/regexp-exec');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n  // #replace needs built-in support for named groups.\n  // #match works fine because it just return the exec results, even if it has\n  // a \"grops\" property.\n  var re = /./;\n  re.exec = function () {\n    var result = [];\n    result.groups = { a: '7' };\n    return result;\n  };\n  return ''.replace(re, '$<a>') !== '7';\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  return 'a'.replace(/./, '$0') === '$0';\n})();\n\nvar REPLACE = wellKnownSymbol('replace');\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\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  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\nmodule.exports = function (KEY, length, exec, 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    (KEY === 'replace' && !(\n      REPLACE_SUPPORTS_NAMED_GROUPS &&\n      REPLACE_KEEPS_$0 &&\n      !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n    )) ||\n    (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n  ) {\n    var nativeRegExpMethod = /./[SYMBOL];\n    var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n      if (regexp.exec === regexpExec) {\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: nativeRegExpMethod.call(regexp, str, arg2) };\n        }\n        return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n      }\n      return { done: false };\n    }, {\n      REPLACE_KEEPS_$0: REPLACE_KEEPS_$0,\n      REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n    });\n    var stringMethod = methods[0];\n    var regexMethod = methods[1];\n\n    redefine(String.prototype, KEY, stringMethod);\n    redefine(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function (string, arg) { return regexMethod.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function (string) { return regexMethod.call(string, this); }\n    );\n  }\n\n  if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true);\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n  return index + (unicode ? charAt(S, index).length : 1);\n};\n","var classof = require('./classof-raw');\nvar regexpExec = require('./regexp-exec');\n\n// `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n  var exec = R.exec;\n  if (typeof exec === 'function') {\n    var result = exec.call(R, S);\n    if (typeof result !== 'object') {\n      throw TypeError('RegExp exec method returned something other than an Object or null');\n    }\n    return result;\n  }\n\n  if (classof(R) !== 'RegExp') {\n    throw TypeError('RegExp#exec called on incompatible receiver');\n  }\n\n  return regexpExec.call(R, S);\n};\n\n","var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n","var getBuiltIn = require('../internals/get-built-in');\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\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 ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  var context = new Axios(defaultConfig);\n  var instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context);\n\n  // Copy context to instance\n  utils.extend(instance, context);\n\n  return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n  return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n  this.defaults = instanceConfig;\n  this.interceptors = {\n    request: new InterceptorManager(),\n    response: new InterceptorManager()\n  };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n  /*eslint no-param-reassign:0*/\n  // Allow for axios('example/url'[, config]) a la fetch API\n  if (typeof config === 'string') {\n    config = arguments[1] || {};\n    config.url = arguments[0];\n  } else {\n    config = config || {};\n  }\n\n  config = mergeConfig(this.defaults, config);\n\n  // Set config.method\n  if (config.method) {\n    config.method = config.method.toLowerCase();\n  } else if (this.defaults.method) {\n    config.method = this.defaults.method.toLowerCase();\n  } else {\n    config.method = 'get';\n  }\n\n  // Hook up interceptors middleware\n  var chain = [dispatchRequest, undefined];\n  var promise = Promise.resolve(config);\n\n  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n    chain.unshift(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n    chain.push(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  while (chain.length) {\n    promise = promise.then(chain.shift(), chain.shift());\n  }\n\n  return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n  config = mergeConfig(this.defaults, config);\n  return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(utils.merge(config || {}, {\n      method: method,\n      url: url\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, data, config) {\n    return this.request(utils.merge(config || {}, {\n      method: method,\n      url: url,\n      data: data\n    }));\n  };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n  this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n  this.handlers.push({\n    fulfilled: fulfilled,\n    rejected: rejected\n  });\n  return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n  if (this.handlers[id]) {\n    this.handlers[id] = null;\n  }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n  utils.forEach(this.handlers, function forEachHandler(h) {\n    if (h !== null) {\n      fn(h);\n    }\n  });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  // Ensure headers exist\n  config.headers = config.headers || {};\n\n  // Transform request data\n  config.data = transformData(\n    config.data,\n    config.headers,\n    config.transformRequest\n  );\n\n  // Flatten headers\n  config.headers = utils.merge(\n    config.headers.common || {},\n    config.headers[config.method] || {},\n    config.headers\n  );\n\n  utils.forEach(\n    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n    function cleanHeaderConfig(method) {\n      delete config.headers[method];\n    }\n  );\n\n  var adapter = config.adapter || defaults.adapter;\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData(\n      response.data,\n      response.headers,\n      config.transformResponse\n    );\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData(\n          reason.response.data,\n          reason.response.headers,\n          config.transformResponse\n        );\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n  /*eslint no-param-reassign:0*/\n  utils.forEach(fns, function transform(fn) {\n    data = fn(data, headers);\n  });\n\n  return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n  utils.forEach(headers, function processHeader(value, name) {\n    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n      headers[normalizedName] = value;\n      delete headers[name];\n    }\n  });\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n  var validateStatus = response.config.validateStatus;\n  if (!validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(createError(\n      'Request failed with status code ' + response.status,\n      response.config,\n      null,\n      response.request,\n      response\n    ));\n  }\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n  error.config = config;\n  if (code) {\n    error.code = code;\n  }\n\n  error.request = request;\n  error.response = response;\n  error.isAxiosError = true;\n\n  error.toJSON = function() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: this.config,\n      code: this.code\n    };\n  };\n  return error;\n};\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n  if (baseURL && !isAbsoluteURL(requestedURL)) {\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n};\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n  var parsed = {};\n  var key;\n  var val;\n  var i;\n\n  if (!headers) { return parsed; }\n\n  utils.forEach(headers.split('\\n'), function parser(line) {\n    i = line.indexOf(':');\n    key = utils.trim(line.substr(0, i)).toLowerCase();\n    val = utils.trim(line.substr(i + 1));\n\n    if (key) {\n      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n        return;\n      }\n      if (key === 'set-cookie') {\n        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n      } else {\n        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n      }\n    }\n  });\n\n  return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs have full support of the APIs needed to test\n  // whether the request URL is of the same origin as current location.\n    (function standardBrowserEnv() {\n      var msie = /(msie|trident)/i.test(navigator.userAgent);\n      var urlParsingNode = document.createElement('a');\n      var originURL;\n\n      /**\n    * Parse a URL to discover it's components\n    *\n    * @param {String} url The URL to be parsed\n    * @returns {Object}\n    */\n      function resolveURL(url) {\n        var href = url;\n\n        if (msie) {\n        // IE needs attribute set twice to normalize properties\n          urlParsingNode.setAttribute('href', href);\n          href = urlParsingNode.href;\n        }\n\n        urlParsingNode.setAttribute('href', href);\n\n        // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n        return {\n          href: urlParsingNode.href,\n          protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n          host: urlParsingNode.host,\n          search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n          hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n          hostname: urlParsingNode.hostname,\n          port: urlParsingNode.port,\n          pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n            urlParsingNode.pathname :\n            '/' + urlParsingNode.pathname\n        };\n      }\n\n      originURL = resolveURL(window.location.href);\n\n      /**\n    * Determine if a URL shares the same origin as the current location\n    *\n    * @param {String} requestURL The URL to test\n    * @returns {boolean} True if URL shares the same origin, otherwise false\n    */\n      return function isURLSameOrigin(requestURL) {\n        var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n        return (parsed.protocol === originURL.protocol &&\n            parsed.host === originURL.host);\n      };\n    })() :\n\n  // Non standard browser envs (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return function isURLSameOrigin() {\n        return true;\n      };\n    })()\n);\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs support document.cookie\n    (function standardBrowserEnv() {\n      return {\n        write: function write(name, value, expires, path, domain, secure) {\n          var cookie = [];\n          cookie.push(name + '=' + encodeURIComponent(value));\n\n          if (utils.isNumber(expires)) {\n            cookie.push('expires=' + new Date(expires).toGMTString());\n          }\n\n          if (utils.isString(path)) {\n            cookie.push('path=' + path);\n          }\n\n          if (utils.isString(domain)) {\n            cookie.push('domain=' + domain);\n          }\n\n          if (secure === true) {\n            cookie.push('secure');\n          }\n\n          document.cookie = cookie.join('; ');\n        },\n\n        read: function read(name) {\n          var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n          return (match ? decodeURIComponent(match[3]) : null);\n        },\n\n        remove: function remove(name) {\n          this.write(name, '', Date.now() - 86400000);\n        }\n      };\n    })() :\n\n  // Non standard browser env (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return {\n        write: function write() {},\n        read: function read() { return null; },\n        remove: function remove() {}\n      };\n    })()\n);\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n  if (typeof executor !== 'function') {\n    throw new TypeError('executor must be a function.');\n  }\n\n  var resolvePromise;\n  this.promise = new Promise(function promiseExecutor(resolve) {\n    resolvePromise = resolve;\n  });\n\n  var token = this;\n  executor(function cancel(message) {\n    if (token.reason) {\n      // Cancellation has already been requested\n      return;\n    }\n\n    token.reason = new Cancel(message);\n    resolvePromise(token.reason);\n  });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n  if (this.reason) {\n    throw this.reason;\n  }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n  var cancel;\n  var token = new CancelToken(function executor(c) {\n    cancel = c;\n  });\n  return {\n    token: token,\n    cancel: cancel\n  };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n};\n","import { subscribe } from '@nextcloud/event-bus'\n\nconst tokenElement = document.getElementsByTagName('head')[0]\nlet token = tokenElement ? tokenElement.getAttribute('data-requesttoken') : null\n\ninterface CsrfTokenObserver {\n\t(token: string): void;\n}\n\nconst observers: Array<CsrfTokenObserver> = []\n\nexport function getRequestToken(): string | null {\n\treturn token\n}\n\nexport function onRequestTokenUpdate(observer: CsrfTokenObserver): void {\n\tobservers.push(observer)\n}\n\n// Listen to server event and keep token in sync\nsubscribe('csrf-token-update', e => {\n\ttoken = e.token\n\n\tobservers.forEach(observer => {\n\t\ttry {\n\t\t\tobserver(e.token)\n\t\t} catch (e) {\n\t\t\tconsole.error('error updating CSRF token observer', e)\n\t\t}\n\t})\n})\n","import valid from \"semver/functions/valid\";\nimport major from \"semver/functions/major\";\n\nimport packageJson from \"../package.json\";\nimport { Event } from \"./Event.js\";\nimport { EventBus } from \"./EventBus.js\";\nimport { EventHandler } from \"./EventHandler.js\";\n\nexport class ProxyBus implements EventBus {\n\n    private bus: EventBus;\n\n    constructor(bus: EventBus) {\n        if (typeof bus.getVersion !== 'function' || !valid(bus.getVersion())) {\n            console.warn('Proxying an event bus with an unknown or invalid version')\n        } else if (major(bus.getVersion()) !== major(this.getVersion())) {\n            console.warn('Proxying an event bus of version ' + bus.getVersion() + ' with ' + this.getVersion())\n        }\n\n        this.bus = bus;\n    }\n\n    getVersion(): string {\n        return packageJson.version\n    }\n\n    subscribe(name: string, handler: EventHandler): void {\n        this.bus.subscribe(name, handler);\n    }\n\n    unsubscribe(name: string, handler: EventHandler): void {\n        this.bus.unsubscribe(name, handler);\n    }\n\n    emit(name: string, event: Event): void {\n        this.bus.emit(name, event);\n    }\n\n}\n","const parse = require('./parse')\nconst valid = (version, options) => {\n  const v = parse(version, options)\n  return v ? v.version : null\n}\nmodule.exports = valid\n","const {MAX_LENGTH} = require('../internal/constants')\nconst { re, t } = require('../internal/re')\nconst SemVer = require('../classes/semver')\n\nconst parse = (version, options) => {\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n\n  if (version instanceof SemVer) {\n    return version\n  }\n\n  if (typeof version !== 'string') {\n    return null\n  }\n\n  if (version.length > MAX_LENGTH) {\n    return null\n  }\n\n  const r = options.loose ? re[t.LOOSE] : re[t.FULL]\n  if (!r.test(version)) {\n    return null\n  }\n\n  try {\n    return new SemVer(version, options)\n  } catch (er) {\n    return null\n  }\n}\n\nmodule.exports = parse\n","const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n  const anum = numeric.test(a)\n  const bnum = numeric.test(b)\n\n  if (anum && bnum) {\n    a = +a\n    b = +b\n  }\n\n  return a === b ? 0\n    : (anum && !bnum) ? -1\n    : (bnum && !anum) ? 1\n    : a < b ? -1\n    : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n  compareIdentifiers,\n  rcompareIdentifiers\n}\n","const SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","import packageJson from \"../package.json\";\nimport { Event } from \"./Event.js\";\nimport { EventBus } from \"./EventBus.js\";\nimport { EventHandler } from \"./EventHandler.js\";\n\nexport class SimpleBus implements EventBus {\n\n    private handlers = new Map<string, EventHandler[]>();\n\n    getVersion(): string {\n        return packageJson.version\n    }\n\n    subscribe(name: string, handler: EventHandler): void {\n        this.handlers.set(name, (this.handlers.get(name) || []).concat(handler));\n    }\n\n    unsubscribe(name: string, handler: EventHandler): void {\n        this.handlers.set(name, (this.handlers.get(name) || []).filter(h => h != handler));\n    }\n\n    emit(name: string, event: Event): void {\n        (this.handlers.get(name) || []).forEach(h => {\n            try {\n                h(event)\n            } catch (e) {\n                console.error('could not invoke event listener', e)\n            }\n        })\n    }\n\n}\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  function F() { /* empty */ }\n  F.prototype.constructor = null;\n  return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n  if (!isObject(it) && it !== null) {\n    throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n  } return it;\n};\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.github.io/ecma262/#sec-map-objects\nmodule.exports = collection('Map', function (init) {\n  return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n  var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n  var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var NativeConstructor = global[CONSTRUCTOR_NAME];\n  var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n  var Constructor = NativeConstructor;\n  var exported = {};\n\n  var fixMethod = function (KEY) {\n    var nativeMethod = NativePrototype[KEY];\n    redefine(NativePrototype, KEY,\n      KEY == 'add' ? function add(value) {\n        nativeMethod.call(this, value === 0 ? 0 : value);\n        return this;\n      } : KEY == 'delete' ? function (key) {\n        return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n      } : KEY == 'get' ? function get(key) {\n        return IS_WEAK && !isObject(key) ? undefined : nativeMethod.call(this, key === 0 ? 0 : key);\n      } : KEY == 'has' ? function has(key) {\n        return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n      } : function set(key, value) {\n        nativeMethod.call(this, key === 0 ? 0 : key, value);\n        return this;\n      }\n    );\n  };\n\n  // eslint-disable-next-line max-len\n  if (isForced(CONSTRUCTOR_NAME, typeof NativeConstructor != 'function' || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n    new NativeConstructor().entries().next();\n  })))) {\n    // create collection constructor\n    Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n    InternalMetadataModule.REQUIRED = true;\n  } else if (isForced(CONSTRUCTOR_NAME, true)) {\n    var instance = new Constructor();\n    // early implementations not supports chaining\n    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n    // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n    var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n    // most early implementations doesn't supports iterables, most modern - not close it correctly\n    // eslint-disable-next-line no-new\n    var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n    // for early implementations -0 and +0 not the same\n    var BUGGY_ZERO = !IS_WEAK && fails(function () {\n      // V8 ~ Chromium 42- fails only with 5+ elements\n      var $instance = new NativeConstructor();\n      var index = 5;\n      while (index--) $instance[ADDER](index, index);\n      return !$instance.has(-0);\n    });\n\n    if (!ACCEPT_ITERABLES) {\n      Constructor = wrapper(function (dummy, iterable) {\n        anInstance(dummy, Constructor, CONSTRUCTOR_NAME);\n        var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n        if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP);\n        return that;\n      });\n      Constructor.prototype = NativePrototype;\n      NativePrototype.constructor = Constructor;\n    }\n\n    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n\n    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n    // weak collections should not contains .clear method\n    if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n  }\n\n  exported[CONSTRUCTOR_NAME] = Constructor;\n  $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n  setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n  if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n  return Constructor;\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  return Object.isExtensible(Object.preventExtensions({}));\n});\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n  getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, CONSTRUCTOR_NAME);\n      setInternalState(that, {\n        type: CONSTRUCTOR_NAME,\n        index: create(null),\n        first: undefined,\n        last: undefined,\n        size: 0\n      });\n      if (!DESCRIPTORS) that.size = 0;\n      if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP);\n    });\n\n    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n    var define = function (that, key, value) {\n      var state = getInternalState(that);\n      var entry = getEntry(that, key);\n      var previous, index;\n      // change existing entry\n      if (entry) {\n        entry.value = value;\n      // create new entry\n      } else {\n        state.last = entry = {\n          index: index = fastKey(key, true),\n          key: key,\n          value: value,\n          previous: previous = state.last,\n          next: undefined,\n          removed: false\n        };\n        if (!state.first) state.first = entry;\n        if (previous) previous.next = entry;\n        if (DESCRIPTORS) state.size++;\n        else that.size++;\n        // add to index\n        if (index !== 'F') state.index[index] = entry;\n      } return that;\n    };\n\n    var getEntry = function (that, key) {\n      var state = getInternalState(that);\n      // fast case\n      var index = fastKey(key);\n      var entry;\n      if (index !== 'F') return state.index[index];\n      // frozen object case\n      for (entry = state.first; entry; entry = entry.next) {\n        if (entry.key == key) return entry;\n      }\n    };\n\n    redefineAll(C.prototype, {\n      // 23.1.3.1 Map.prototype.clear()\n      // 23.2.3.2 Set.prototype.clear()\n      clear: function clear() {\n        var that = this;\n        var state = getInternalState(that);\n        var data = state.index;\n        var entry = state.first;\n        while (entry) {\n          entry.removed = true;\n          if (entry.previous) entry.previous = entry.previous.next = undefined;\n          delete data[entry.index];\n          entry = entry.next;\n        }\n        state.first = state.last = undefined;\n        if (DESCRIPTORS) state.size = 0;\n        else that.size = 0;\n      },\n      // 23.1.3.3 Map.prototype.delete(key)\n      // 23.2.3.4 Set.prototype.delete(value)\n      'delete': function (key) {\n        var that = this;\n        var state = getInternalState(that);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.next;\n          var prev = entry.previous;\n          delete state.index[entry.index];\n          entry.removed = true;\n          if (prev) prev.next = next;\n          if (next) next.previous = prev;\n          if (state.first == entry) state.first = next;\n          if (state.last == entry) state.last = prev;\n          if (DESCRIPTORS) state.size--;\n          else that.size--;\n        } return !!entry;\n      },\n      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n      forEach: function forEach(callbackfn /* , that = undefined */) {\n        var state = getInternalState(this);\n        var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n        var entry;\n        while (entry = entry ? entry.next : state.first) {\n          boundFunction(entry.value, entry.key, this);\n          // revert to the last existing entry\n          while (entry && entry.removed) entry = entry.previous;\n        }\n      },\n      // 23.1.3.7 Map.prototype.has(key)\n      // 23.2.3.7 Set.prototype.has(value)\n      has: function has(key) {\n        return !!getEntry(this, key);\n      }\n    });\n\n    redefineAll(C.prototype, IS_MAP ? {\n      // 23.1.3.6 Map.prototype.get(key)\n      get: function get(key) {\n        var entry = getEntry(this, key);\n        return entry && entry.value;\n      },\n      // 23.1.3.9 Map.prototype.set(key, value)\n      set: function set(key, value) {\n        return define(this, key === 0 ? 0 : key, value);\n      }\n    } : {\n      // 23.2.3.1 Set.prototype.add(value)\n      add: function add(value) {\n        return define(this, value = value === 0 ? 0 : value, value);\n      }\n    });\n    if (DESCRIPTORS) defineProperty(C.prototype, 'size', {\n      get: function () {\n        return getInternalState(this).size;\n      }\n    });\n    return C;\n  },\n  setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) {\n    var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n    var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n    var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n    // add .keys, .values, .entries, [@@iterator]\n    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n    defineIterator(C, CONSTRUCTOR_NAME, function (iterated, kind) {\n      setInternalState(this, {\n        type: ITERATOR_NAME,\n        target: iterated,\n        state: getInternalCollectionState(iterated),\n        kind: kind,\n        last: undefined\n      });\n    }, function () {\n      var state = getInternalIteratorState(this);\n      var kind = state.kind;\n      var entry = state.last;\n      // revert to the last existing entry\n      while (entry && entry.removed) entry = entry.previous;\n      // get next entry\n      if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n        // or finish the iteration\n        state.target = undefined;\n        return { value: undefined, done: true };\n      }\n      // return step by kind\n      if (kind == 'keys') return { value: entry.key, done: false };\n      if (kind == 'values') return { value: entry.value, done: false };\n      return { value: [entry.key, entry.value], done: false };\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // add [@@species], 23.1.2.2, 23.2.2.2\n    setSpecies(CONSTRUCTOR_NAME);\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.github.io/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n  return '[object ' + classof(this) + ']';\n};\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  var Collection = global[COLLECTION_NAME];\n  var CollectionPrototype = Collection && Collection.prototype;\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","/// <reference types=\"@nextcloud/typings\" />\n\ndeclare var OC: Nextcloud.v16.OC | Nextcloud.v17.OC | Nextcloud.v18.OC | Nextcloud.v19.OC;\n\nconst uidElement = document\n\t.getElementsByTagName('head')[0]\nconst uid = uidElement ? uidElement.getAttribute('data-user') : null\n\nconst displayNameElement = document\n\t.getElementsByTagName('head')[0]\nconst displayName = displayNameElement ? displayNameElement.getAttribute('data-user-displayname') : null\n\nconst isAdmin = (typeof OC === 'undefined')\n\t? false\n\t: OC.isUserAdmin()\n\nexport interface NextcloudUser {\n\tuid: String,\n\tdisplayName: String | null,\n\tisAdmin: Boolean,\n}\n\nexport function getCurrentUser(): NextcloudUser | null {\n\tif (uid === null) {\n\t\treturn null\n\t}\n\n\treturn {\n\t\tuid,\n\t\tdisplayName,\n\t\tisAdmin,\n\t} as NextcloudUser\n}\n","'use strict';\n\nvar fails = require('./fails');\n\n// babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError,\n// so we use an intermediate function.\nfunction RE(s, f) {\n  return RegExp(s, f);\n}\n\nexports.UNSUPPORTED_Y = fails(function () {\n  // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\n  var re = RE('a', 'y');\n  re.lastIndex = 2;\n  return re.exec('abcd') != null;\n});\n\nexports.BROKEN_CARET = fails(function () {\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n  var re = RE('^r', 'gy');\n  re.lastIndex = 2;\n  return re.exec('str') != null;\n});\n","//! moment.js\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks () {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback (callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return input != null && Object.prototype.toString.call(input) === '[object Object]';\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return (Object.getOwnPropertyNames(obj).length === 0);\n        } else {\n            var k;\n            for (k in obj) {\n                if (obj.hasOwnProperty(k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n    }\n\n    function isDate(input) {\n        return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n    }\n\n    function map(arr, fn) {\n        var res = [], i;\n        for (i = 0; i < arr.length; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty           : false,\n            unusedTokens    : [],\n            unusedInput     : [],\n            overflow        : -2,\n            charsLeftOver   : 0,\n            nullInput       : false,\n            invalidMonth    : null,\n            invalidFormat   : false,\n            userInvalidated : false,\n            iso             : false,\n            parsedDateParts : [],\n            meridiem        : null,\n            rfc2822         : false,\n            weekdayMismatch : false\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this);\n            var len = t.length >>> 0;\n\n            for (var i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m);\n            var parsedParts = some.call(flags.parsedDateParts, function (i) {\n                return i != null;\n            });\n            var isNowValid = !isNaN(m._d.getTime()) &&\n                flags.overflow < 0 &&\n                !flags.empty &&\n                !flags.invalidMonth &&\n                !flags.invalidWeekday &&\n                !flags.weekdayMismatch &&\n                !flags.nullInput &&\n                !flags.invalidFormat &&\n                !flags.userInvalidated &&\n                (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                isNowValid = isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n\n            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n                m._isValid = isNowValid;\n            }\n            else {\n                return isNowValid;\n            }\n        }\n        return m._isValid;\n    }\n\n    function createInvalid (flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        }\n        else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = hooks.momentProperties = [];\n\n    function copyConfig(to, from) {\n        var i, prop, val;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentProperties.length > 0) {\n            for (i = 0; i < momentProperties.length; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    var updateInProgress = false;\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment (obj) {\n        return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n    }\n\n    function absFloor (number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if ((dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    function warn(msg) {\n        if (hooks.suppressDeprecationWarnings === false &&\n                (typeof console !==  'undefined') && console.warn) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [];\n                var arg;\n                for (var i = 0; i < arguments.length; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (var key in arguments[0]) {\n                            arg += key + ': ' + arguments[0][key] + ', ';\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n    }\n\n    function set (config) {\n        var prop, i;\n        for (i in config) {\n            prop = config[i];\n            if (isFunction(prop)) {\n                this[i] = prop;\n            } else {\n                this['_' + i] = prop;\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' + (/\\d{1,2}/).source);\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig), prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (hasOwnProp(parentConfig, prop) &&\n                    !hasOwnProp(childConfig, prop) &&\n                    isObject(parentConfig[prop])) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i, res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay : '[Today at] LT',\n        nextDay : '[Tomorrow at] LT',\n        nextWeek : 'dddd [at] LT',\n        lastDay : '[Yesterday at] LT',\n        lastWeek : '[Last] dddd [at] LT',\n        sameElse : 'L'\n    };\n\n    function calendar (key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    var defaultLongDateFormat = {\n        LTS  : 'h:mm:ss A',\n        LT   : 'h:mm A',\n        L    : 'MM/DD/YYYY',\n        LL   : 'MMMM D, YYYY',\n        LLL  : 'MMMM D, YYYY h:mm A',\n        LLLL : 'dddd, MMMM D, YYYY h:mm A'\n    };\n\n    function longDateFormat (key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n            return val.slice(1);\n        });\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate () {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d';\n    var defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal (number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future : 'in %s',\n        past   : '%s ago',\n        s  : 'a few seconds',\n        ss : '%d seconds',\n        m  : 'a minute',\n        mm : '%d minutes',\n        h  : 'an hour',\n        hh : '%d hours',\n        d  : 'a day',\n        dd : '%d days',\n        M  : 'a month',\n        MM : '%d months',\n        y  : 'a year',\n        yy : '%d years'\n    };\n\n    function relativeTime (number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return (isFunction(output)) ?\n            output(number, withoutSuffix, string, isFuture) :\n            output.replace(/%d/i, number);\n    }\n\n    function pastFuture (diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias (unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [];\n        for (var u in unitsObj) {\n            units.push({unit: u, priority: priorities[u]});\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n    }\n\n    var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\n    var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n    var formatFunctions = {};\n\n    var formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken (token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(func.apply(this, arguments), token);\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens), i, length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '', i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var match1         = /\\d/;            //       0 - 9\n    var match2         = /\\d\\d/;          //      00 - 99\n    var match3         = /\\d{3}/;         //     000 - 999\n    var match4         = /\\d{4}/;         //    0000 - 9999\n    var match6         = /[+-]?\\d{6}/;    // -999999 - 999999\n    var match1to2      = /\\d\\d?/;         //       0 - 99\n    var match3to4      = /\\d\\d\\d\\d?/;     //     999 - 9999\n    var match5to6      = /\\d\\d\\d\\d\\d\\d?/; //   99999 - 999999\n    var match1to3      = /\\d{1,3}/;       //       0 - 999\n    var match1to4      = /\\d{1,4}/;       //       0 - 9999\n    var match1to6      = /[+-]?\\d{1,6}/;  // -999999 - 999999\n\n    var matchUnsigned  = /\\d+/;           //       0 - inf\n    var matchSigned    = /[+-]?\\d+/;      //    -inf - inf\n\n    var matchOffset    = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n    var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n    var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n    // any word (or two) characters or numbers including two/three word month in arabic.\n    // includes scottish gaelic two word and hyphenated months\n    var matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n\n    var regexes = {};\n\n    function addRegexToken (token, regex, strictRegex) {\n        regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n            return (isStrict && strictRegex) ? strictRegex : regex;\n        };\n    }\n\n    function getParseRegexForToken (token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n            return p1 || p2 || p3 || p4;\n        }));\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken (token, callback) {\n        var i, func = callback;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        for (i = 0; i < token.length; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken (token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0;\n    var MONTH = 1;\n    var DATE = 2;\n    var HOUR = 3;\n    var MINUTE = 4;\n    var SECOND = 5;\n    var MILLISECOND = 6;\n    var WEEK = 7;\n    var WEEKDAY = 8;\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? '' + y : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY',   4],       0, 'year');\n    addFormatToken(0, ['YYYYY',  5],       0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\n\n    // PARSING\n\n    addRegexToken('Y',      matchSigned);\n    addRegexToken('YY',     match1to2, match2);\n    addRegexToken('YYYY',   match1to4, match4);\n    addRegexToken('YYYYY',  match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear () {\n        return isLeapYear(this.year());\n    }\n\n    function makeGetSet (unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get (mom, unit) {\n        return mom.isValid() ?\n            mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n    }\n\n    function set$1 (mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n            }\n            else {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function stringGet (units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n\n    function stringSet (units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units);\n            for (var i = 0; i < prioritized.length; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M',    match1to2);\n    addRegexToken('MM',   match1to2, match2);\n    addRegexToken('MMM',  function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n    function localeMonths (m, format) {\n        if (!m) {\n            return isArray(this._months) ? this._months :\n                this._months['standalone'];\n        }\n        return isArray(this._months) ? this._months[m.month()] :\n            this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n    }\n\n    var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n    function localeMonthsShort (m, format) {\n        if (!m) {\n            return isArray(this._monthsShort) ? this._monthsShort :\n                this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n            this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i, ii, mom, llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse (monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n                this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth (mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth (value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth () {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    var defaultMonthsShortRegex = matchWord;\n    function monthsShortRegex (isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict ?\n                this._monthsShortStrictRegex : this._monthsShortRegex;\n        }\n    }\n\n    var defaultMonthsRegex = matchWord;\n    function monthsRegex (isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict ?\n                this._monthsStrictRegex : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse () {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [], longPieces = [], mixedPieces = [],\n            i, mom;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n        this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n    }\n\n    function createDate (y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate (y) {\n        var date;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            var args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear, resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek, resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w',  match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W',  match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n        week[token.substr(0, 1)] = toInt(input);\n    });\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek (mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek () {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear () {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek (input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek (input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\n\n    // PARSING\n\n    addRegexToken('d',    match1to2);\n    addRegexToken('e',    match1to2);\n    addRegexToken('E',    match1to2);\n    addRegexToken('dd',   function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd',   function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd',   function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays (ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n    function localeWeekdays (m, format) {\n        var weekdays = isArray(this._weekdays) ? this._weekdays :\n            this._weekdays[(m && m !== true && this._weekdays.isFormat.test(format)) ? 'format' : 'standalone'];\n        return (m === true) ? shiftWeekdays(weekdays, this._week.dow)\n            : (m) ? weekdays[m.day()] : weekdays;\n    }\n\n    var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n    function localeWeekdaysShort (m) {\n        return (m === true) ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n    }\n\n    var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n    function localeWeekdaysMin (m) {\n        return (m === true) ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse (weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n                this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n                this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n            }\n            if (!this._weekdaysParse[i]) {\n                regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    var defaultWeekdaysRegex = matchWord;\n    function weekdaysRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict ?\n                this._weekdaysStrictRegex : this._weekdaysRegex;\n        }\n    }\n\n    var defaultWeekdaysShortRegex = matchWord;\n    function weekdaysShortRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict ?\n                this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n        }\n    }\n\n    var defaultWeekdaysMinRegex = matchWord;\n    function weekdaysMinRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict ?\n                this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n        }\n    }\n\n\n    function computeWeekdaysParse () {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n            i, mom, minp, shortp, longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = this.weekdaysMin(mom, '');\n            shortp = this.weekdaysShort(mom, '');\n            longp = this.weekdays(mom, '');\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 7; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n        this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n        this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2);\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2);\n    });\n\n    function meridiem (token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\n\n    // PARSING\n\n    function matchMeridiem (isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a',  matchMeridiem);\n    addRegexToken('A',  matchMeridiem);\n    addRegexToken('H',  match1to2);\n    addRegexToken('h',  match1to2);\n    addRegexToken('k',  match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4;\n        var pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4;\n        var pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM (input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return ((input + '').toLowerCase().charAt(0) === 'p');\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n    function localeMeridiem (hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n\n    // MOMENTS\n\n    // Setting the hour should keep the time, because the user explicitly\n    // specified which hour they want. So trying to maintain the same hour (in\n    // a new timezone) makes sense. Adding/subtracting hours does not follow\n    // this rule.\n    var getSetHour = makeGetSet('Hours', true);\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse\n    };\n\n    // internal storage for locale config files\n    var locales = {};\n    var localeFamilies = {};\n    var globalLocale;\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0, j, next, locale, split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (!locales[name] && (typeof module !== 'undefined') &&\n                module && module.exports) {\n            try {\n                oldLocale = globalLocale._abbr;\n                var aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {}\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale (key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            }\n            else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            }\n            else {\n                if ((typeof console !==  'undefined') && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn('Locale ' + key +  ' not found. Did you forget to load it?');\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale (name, config) {\n        if (config !== null) {\n            var locale, parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple('defineLocaleOverride',\n                        'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale, tmpLocale, parentConfig = baseConfig;\n            // MERGE\n            tmpLocale = loadLocale(name);\n            if (tmpLocale != null) {\n                parentConfig = tmpLocale._config;\n            }\n            config = mergeConfigs(parentConfig, config);\n            locale = new Locale(config);\n            locale.parentLocale = locales[name];\n            locales[name] = locale;\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale (key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow (m) {\n        var overflow;\n        var a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :\n                a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n                a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n                a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :\n                a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :\n                a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n                -1;\n\n            if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray (config) {\n        var i, date, input = [], currentDate, expectedWeekday, yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (config._a[HOUR] === 24 &&\n                config._a[MINUTE] === 0 &&\n                config._a[SECOND] === 0 &&\n                config._a[MILLISECOND] === 0) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n        expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            var curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n    var basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\n    var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\n    var isoDates = [\n        ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n        ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n        ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n        ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n        ['YYYY-DDD', /\\d{4}-\\d{3}/],\n        ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n        ['YYYYYYMMDD', /[+-]\\d{10}/],\n        ['YYYYMMDD', /\\d{8}/],\n        // YYYYMM is NOT allowed by the standard\n        ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n        ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n        ['YYYYDDD', /\\d{7}/]\n    ];\n\n    // iso time formats and regexes\n    var isoTimes = [\n        ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n        ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n        ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n        ['HH:mm', /\\d\\d:\\d\\d/],\n        ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n        ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n        ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n        ['HHmm', /\\d\\d\\d\\d/],\n        ['HH', /\\d\\d/]\n    ];\n\n    var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n    // date from iso format\n    function configFromISO(config) {\n        var i, l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime, dateFormat, timeFormat, tzFormat;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n\n            for (i = 0, l = isoDates.length; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimes.length; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n    var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;\n\n    function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10)\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    var obsOffsets = {\n        UT: 0,\n        GMT: 0,\n        EDT: -4 * 60,\n        EST: -5 * 60,\n        CDT: -5 * 60,\n        CST: -6 * 60,\n        MDT: -6 * 60,\n        MST: -7 * 60,\n        PDT: -7 * 60,\n        PST: -8 * 60\n    };\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10);\n            var m = hm % 100, h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i));\n        if (match) {\n            var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from iso format or fallback\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        // Final attempt, use Input Fallback\n        hooks.createFromInputFallback(config);\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n        'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n        'discouraged and will be removed in an upcoming major release. Please refer to ' +\n        'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i, parsedInput, tokens, token, skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0;\n\n        tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n        for (i = 0; i < tokens.length; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n            // console.log('token', token, 'parsedInput', parsedInput,\n            //         'regex', getParseRegexForToken(token, config));\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                }\n                else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            }\n            else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n\n    function meridiemFixWrap (locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n\n            scoreToBeat,\n            i,\n            currentScore;\n\n        if (config._f.length === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < config._f.length; i++) {\n            currentScore = 0;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (!isValid(tempConfig)) {\n                continue;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (scoreToBeat == null || currentScore < scoreToBeat) {\n                scoreToBeat = currentScore;\n                bestMoment = tempConfig;\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i);\n        config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n            return obj && parseInt(obj, 10);\n        });\n\n        configFromArray(config);\n    }\n\n    function createFromConfig (config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig (config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({nullInput: true});\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        }  else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC (input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if ((isObject(input) && isObjectEmpty(input)) ||\n                (isArray(input) && input.length === 0)) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n        'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other < this ? this : other;\n            } else {\n                return createInvalid();\n            }\n        }\n    );\n\n    var prototypeMax = deprecate(\n        'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other > this ? this : other;\n            } else {\n                return createInvalid();\n            }\n        }\n    );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +(new Date());\n    };\n\n    var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n    function isDurationValid(m) {\n        for (var key in m) {\n            if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n                return false;\n            }\n        }\n\n        var unitHasDecimal = false;\n        for (var i = 0; i < ordering.length; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration (duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds = +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days +\n            weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months +\n            quarters * 3 +\n            years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration (obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound (number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // FORMATTING\n\n    function offset (token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset();\n            var sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z',  matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher);\n\n        if (matches === null) {\n            return null;\n        }\n\n        var chunk   = matches[matches.length - 1] || [];\n        var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ?\n          0 :\n          parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset (m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset (input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone (input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC (keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal (keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset () {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            }\n            else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset (input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime () {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted () {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {};\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted = this.isValid() &&\n                compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal () {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset () {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc () {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\n    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n    // and further modified to allow for strings containing both week and day\n    var isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration (input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms : input._milliseconds,\n                d  : input._days,\n                M  : input._months\n            };\n        } else if (isNumber(input)) {\n            duration = {};\n            if (key) {\n                duration[key] = input;\n            } else {\n                duration.milliseconds = input;\n            }\n        } else if (!!(match = aspNetRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : 1;\n            duration = {\n                y  : 0,\n                d  : toInt(match[DATE])                         * sign,\n                h  : toInt(match[HOUR])                         * sign,\n                m  : toInt(match[MINUTE])                       * sign,\n                s  : toInt(match[SECOND])                       * sign,\n                ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n            };\n        } else if (!!(match = isoRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : 1;\n            duration = {\n                y : parseIso(match[2], sign),\n                M : parseIso(match[3], sign),\n                w : parseIso(match[4], sign),\n                d : parseIso(match[5], sign),\n                h : parseIso(match[6], sign),\n                m : parseIso(match[7], sign),\n                s : parseIso(match[8], sign)\n            };\n        } else if (duration == null) {// checks for null or undefined\n            duration = {};\n        } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n            diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso (inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months = other.month() - base.month() +\n            (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return {milliseconds: 0, months: 0};\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n                'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n                tmp = val; val = period; period = tmp;\n            }\n\n            val = typeof val === 'string' ? +val : val;\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract (mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add      = createAdder(1, 'add');\n    var subtract = createAdder(-1, 'subtract');\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6 ? 'sameElse' :\n                diff < -1 ? 'lastWeek' :\n                diff < 0 ? 'lastDay' :\n                diff < 1 ? 'sameDay' :\n                diff < 2 ? 'nextDay' :\n                diff < 7 ? 'nextWeek' : 'sameElse';\n    }\n\n    function calendar$1 (time, formats) {\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse';\n\n        var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n        return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n    }\n\n    function clone () {\n        return new Moment(this);\n    }\n\n    function isAfter (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween (from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));\n    }\n\n    function isSame (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n        }\n    }\n\n    function isSameOrAfter (input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore (input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff (input, units, asFloat) {\n        var that,\n            zoneDelta,\n            output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year': output = monthDiff(this, that) / 12; break;\n            case 'month': output = monthDiff(this, that); break;\n            case 'quarter': output = monthDiff(this, that) / 3; break;\n            case 'second': output = (this - that) / 1e3; break; // 1000\n            case 'minute': output = (this - that) / 6e4; break; // 1000 * 60\n            case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60\n            case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default: output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff (a, b) {\n        // difference in months\n        var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2, adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString () {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true;\n        var m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect () {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment';\n        var zone = '';\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        var prefix = '[' + func + '(\"]';\n        var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n        var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        var suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format (inputString) {\n        if (!inputString) {\n            inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from (time, withoutSuffix) {\n        if (this.isValid() &&\n                ((isMoment(time) && time.isValid()) ||\n                 createLocal(time).isValid())) {\n            return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow (withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to (time, withoutSuffix) {\n        if (this.isValid() &&\n                ((isMoment(time) && time.isValid()) ||\n                 createLocal(time).isValid())) {\n            return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow (withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale (key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData () {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000;\n    var MS_PER_MINUTE = 60 * MS_PER_SECOND;\n    var MS_PER_HOUR = 60 * MS_PER_MINUTE;\n    var MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return (dividend % divisor + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf (units) {\n        var time;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(this.year(), this.month() - this.month() % 3, 1);\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(this.year(), this.month(), this.date() - this.weekday());\n                break;\n            case 'isoWeek':\n                time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf (units) {\n        var time;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;\n                break;\n            case 'isoWeek':\n                time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf () {\n        return this._d.valueOf() - ((this._offset || 0) * 60000);\n    }\n\n    function unix () {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate () {\n        return new Date(this.valueOf());\n    }\n\n    function toArray () {\n        var m = this;\n        return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n    }\n\n    function toObject () {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds()\n        };\n    }\n\n    function toJSON () {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2 () {\n        return isValid(this);\n    }\n\n    function parsingFlags () {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt () {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict\n        };\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken (token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg',     'weekYear');\n    addWeekYearFormatToken('ggggg',    'weekYear');\n    addWeekYearFormatToken('GGGG',  'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\n\n\n    // PARSING\n\n    addRegexToken('G',      matchSigned);\n    addRegexToken('g',      matchSigned);\n    addRegexToken('GG',     match1to2, match2);\n    addRegexToken('gg',     match1to2, match2);\n    addRegexToken('GGGG',   match1to4, match4);\n    addRegexToken('gggg',   match1to4, match4);\n    addRegexToken('GGGGG',  match1to6, match6);\n    addRegexToken('ggggg',  match1to6, match6);\n\n    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n        week[token.substr(0, 2)] = toInt(input);\n    });\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear (input) {\n        return getSetWeekYearHelper.call(this,\n                input,\n                this.week(),\n                this.weekday(),\n                this.localeData()._week.dow,\n                this.localeData()._week.doy);\n    }\n\n    function getSetISOWeekYear (input) {\n        return getSetWeekYearHelper.call(this,\n                input, this.isoWeek(), this.isoWeekday(), 1, 4);\n    }\n\n    function getISOWeeksInYear () {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getWeeksInYear () {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter (input) {\n        return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIORITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D',  match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict ?\n          (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n          locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\n\n    // PARSING\n\n    addRegexToken('DDD',  match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear (input) {\n        var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n        return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m',  match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s',  match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\n\n    // PARSING\n\n    addRegexToken('S',    match1to3, match1);\n    addRegexToken('SS',   match1to3, match2);\n    addRegexToken('SSS',  match1to3, match3);\n\n    var token;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n    // MOMENTS\n\n    var getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z',  0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr () {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName () {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add               = add;\n    proto.calendar          = calendar$1;\n    proto.clone             = clone;\n    proto.diff              = diff;\n    proto.endOf             = endOf;\n    proto.format            = format;\n    proto.from              = from;\n    proto.fromNow           = fromNow;\n    proto.to                = to;\n    proto.toNow             = toNow;\n    proto.get               = stringGet;\n    proto.invalidAt         = invalidAt;\n    proto.isAfter           = isAfter;\n    proto.isBefore          = isBefore;\n    proto.isBetween         = isBetween;\n    proto.isSame            = isSame;\n    proto.isSameOrAfter     = isSameOrAfter;\n    proto.isSameOrBefore    = isSameOrBefore;\n    proto.isValid           = isValid$2;\n    proto.lang              = lang;\n    proto.locale            = locale;\n    proto.localeData        = localeData;\n    proto.max               = prototypeMax;\n    proto.min               = prototypeMin;\n    proto.parsingFlags      = parsingFlags;\n    proto.set               = stringSet;\n    proto.startOf           = startOf;\n    proto.subtract          = subtract;\n    proto.toArray           = toArray;\n    proto.toObject          = toObject;\n    proto.toDate            = toDate;\n    proto.toISOString       = toISOString;\n    proto.inspect           = inspect;\n    proto.toJSON            = toJSON;\n    proto.toString          = toString;\n    proto.unix              = unix;\n    proto.valueOf           = valueOf;\n    proto.creationData      = creationData;\n    proto.year       = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear    = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month       = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week           = proto.weeks        = getSetWeek;\n    proto.isoWeek        = proto.isoWeeks     = getSetISOWeek;\n    proto.weeksInYear    = getWeeksInYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.date       = getSetDayOfMonth;\n    proto.day        = proto.days             = getSetDayOfWeek;\n    proto.weekday    = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear  = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset            = getSetOffset;\n    proto.utc                  = setOffsetToUTC;\n    proto.local                = setOffsetToLocal;\n    proto.parseZone            = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST                = isDaylightSavingTime;\n    proto.isLocal              = isLocal;\n    proto.isUtcOffset          = isUtcOffset;\n    proto.isUtc                = isUtc;\n    proto.isUTC                = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n    proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n    proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n    proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n    proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n    function createUnix (input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone () {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat (string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar        = calendar;\n    proto$1.longDateFormat  = longDateFormat;\n    proto$1.invalidDate     = invalidDate;\n    proto$1.ordinal         = ordinal;\n    proto$1.preparse        = preParsePostFormat;\n    proto$1.postformat      = preParsePostFormat;\n    proto$1.relativeTime    = relativeTime;\n    proto$1.pastFuture      = pastFuture;\n    proto$1.set             = set;\n\n    proto$1.months            =        localeMonths;\n    proto$1.monthsShort       =        localeMonthsShort;\n    proto$1.monthsParse       =        localeMonthsParse;\n    proto$1.monthsRegex       = monthsRegex;\n    proto$1.monthsShortRegex  = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays       =        localeWeekdays;\n    proto$1.weekdaysMin    =        localeWeekdaysMin;\n    proto$1.weekdaysShort  =        localeWeekdaysShort;\n    proto$1.weekdaysParse  =        localeWeekdaysParse;\n\n    proto$1.weekdaysRegex       =        weekdaysRegex;\n    proto$1.weekdaysShortRegex  =        weekdaysShortRegex;\n    proto$1.weekdaysMinRegex    =        weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1 (format, index, field, setter) {\n        var locale = getLocale();\n        var utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl (format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl (localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0;\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths (format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort (format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (toInt(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n    hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\n    var mathAbs = Math.abs;\n\n    function abs () {\n        var data           = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days         = mathAbs(this._days);\n        this._months       = mathAbs(this._months);\n\n        data.milliseconds  = mathAbs(data.milliseconds);\n        data.seconds       = mathAbs(data.seconds);\n        data.minutes       = mathAbs(data.minutes);\n        data.hours         = mathAbs(data.hours);\n        data.months        = mathAbs(data.months);\n        data.years         = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1 (duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days         += direction * other._days;\n        duration._months       += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1 (input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1 (input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil (number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble () {\n        var milliseconds = this._milliseconds;\n        var days         = this._days;\n        var months       = this._months;\n        var data         = this._data;\n        var seconds, minutes, hours, years, monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0))) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds           = absFloor(milliseconds / 1000);\n        data.seconds      = seconds % 60;\n\n        minutes           = absFloor(seconds / 60);\n        data.minutes      = minutes % 60;\n\n        hours             = absFloor(minutes / 60);\n        data.hours        = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days   = days;\n        data.months = months;\n        data.years  = years;\n\n        return this;\n    }\n\n    function daysToMonths (days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return days * 4800 / 146097;\n    }\n\n    function monthsToDays (months) {\n        // the reverse of daysToMonths\n        return months * 146097 / 4800;\n    }\n\n    function as (units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days;\n        var months;\n        var milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':   return months;\n                case 'quarter': return months / 3;\n                case 'year':    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week'   : return days / 7     + milliseconds / 6048e5;\n                case 'day'    : return days         + milliseconds / 864e5;\n                case 'hour'   : return days * 24    + milliseconds / 36e5;\n                case 'minute' : return days * 1440  + milliseconds / 6e4;\n                case 'second' : return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n                default: throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function valueOf$1 () {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs (alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms');\n    var asSeconds      = makeAs('s');\n    var asMinutes      = makeAs('m');\n    var asHours        = makeAs('h');\n    var asDays         = makeAs('d');\n    var asWeeks        = makeAs('w');\n    var asMonths       = makeAs('M');\n    var asQuarters     = makeAs('Q');\n    var asYears        = makeAs('y');\n\n    function clone$1 () {\n        return createDuration(this);\n    }\n\n    function get$2 (units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds');\n    var seconds      = makeGetter('seconds');\n    var minutes      = makeGetter('minutes');\n    var hours        = makeGetter('hours');\n    var days         = makeGetter('days');\n    var months       = makeGetter('months');\n    var years        = makeGetter('years');\n\n    function weeks () {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round;\n    var thresholds = {\n        ss: 44,         // a few seconds to seconds\n        s : 45,         // seconds to minute\n        m : 45,         // minutes to hour\n        h : 22,         // hours to day\n        d : 26,         // days to month\n        M : 11          // months to year\n    };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n        var duration = createDuration(posNegDuration).abs();\n        var seconds  = round(duration.as('s'));\n        var minutes  = round(duration.as('m'));\n        var hours    = round(duration.as('h'));\n        var days     = round(duration.as('d'));\n        var months   = round(duration.as('M'));\n        var years    = round(duration.as('y'));\n\n        var a = seconds <= thresholds.ss && ['s', seconds]  ||\n                seconds < thresholds.s   && ['ss', seconds] ||\n                minutes <= 1             && ['m']           ||\n                minutes < thresholds.m   && ['mm', minutes] ||\n                hours   <= 1             && ['h']           ||\n                hours   < thresholds.h   && ['hh', hours]   ||\n                days    <= 1             && ['d']           ||\n                days    < thresholds.d   && ['dd', days]    ||\n                months  <= 1             && ['M']           ||\n                months  < thresholds.M   && ['MM', months]  ||\n                years   <= 1             && ['y']           || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding (roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof(roundingFunction) === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold (threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize (withSuffix) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var locale = this.localeData();\n        var output = relativeTime$1(this, !withSuffix, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return ((x > 0) - (x < 0)) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000;\n        var days         = abs$1(this._days);\n        var months       = abs$1(this._months);\n        var minutes, hours, years;\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes           = absFloor(seconds / 60);\n        hours             = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years  = absFloor(months / 12);\n        months %= 12;\n\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        var Y = years;\n        var M = months;\n        var D = days;\n        var h = hours;\n        var m = minutes;\n        var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n        var total = this.asSeconds();\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        var totalSign = total < 0 ? '-' : '';\n        var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return totalSign + 'P' +\n            (Y ? ymSign + Y + 'Y' : '') +\n            (M ? ymSign + M + 'M' : '') +\n            (D ? daysSign + D + 'D' : '') +\n            ((h || m || s) ? 'T' : '') +\n            (h ? hmsSign + h + 'H' : '') +\n            (m ? hmsSign + m + 'M' : '') +\n            (s ? hmsSign + s + 'S' : '');\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid        = isValid$1;\n    proto$2.abs            = abs;\n    proto$2.add            = add$1;\n    proto$2.subtract       = subtract$1;\n    proto$2.as             = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds      = asSeconds;\n    proto$2.asMinutes      = asMinutes;\n    proto$2.asHours        = asHours;\n    proto$2.asDays         = asDays;\n    proto$2.asWeeks        = asWeeks;\n    proto$2.asMonths       = asMonths;\n    proto$2.asQuarters     = asQuarters;\n    proto$2.asYears        = asYears;\n    proto$2.valueOf        = valueOf$1;\n    proto$2._bubble        = bubble;\n    proto$2.clone          = clone$1;\n    proto$2.get            = get$2;\n    proto$2.milliseconds   = milliseconds;\n    proto$2.seconds        = seconds;\n    proto$2.minutes        = minutes;\n    proto$2.hours          = hours;\n    proto$2.days           = days;\n    proto$2.weeks          = weeks;\n    proto$2.months         = months;\n    proto$2.years          = years;\n    proto$2.humanize       = humanize;\n    proto$2.toISOString    = toISOString$1;\n    proto$2.toString       = toISOString$1;\n    proto$2.toJSON         = toISOString$1;\n    proto$2.locale         = locale;\n    proto$2.localeData     = localeData;\n\n    proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n    proto$2.lang = lang;\n\n    // Side effect imports\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input, 10) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    // Side effect imports\n\n\n    hooks.version = '2.24.0';\n\n    setHookCallback(createLocal);\n\n    hooks.fn                    = proto;\n    hooks.min                   = min;\n    hooks.max                   = max;\n    hooks.now                   = now;\n    hooks.utc                   = createUTC;\n    hooks.unix                  = createUnix;\n    hooks.months                = listMonths;\n    hooks.isDate                = isDate;\n    hooks.locale                = getSetGlobalLocale;\n    hooks.invalid               = createInvalid;\n    hooks.duration              = createDuration;\n    hooks.isMoment              = isMoment;\n    hooks.weekdays              = listWeekdays;\n    hooks.parseZone             = createInZone;\n    hooks.localeData            = getLocale;\n    hooks.isDuration            = isDuration;\n    hooks.monthsShort           = listMonthsShort;\n    hooks.weekdaysMin           = listWeekdaysMin;\n    hooks.defineLocale          = defineLocale;\n    hooks.updateLocale          = updateLocale;\n    hooks.locales               = listLocales;\n    hooks.weekdaysShort         = listWeekdaysShort;\n    hooks.normalizeUnits        = normalizeUnits;\n    hooks.relativeTimeRounding  = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat        = getCalendarFormat;\n    hooks.prototype             = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',             // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',  // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',   // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD',                             // <input type=\"date\" />\n        TIME: 'HH:mm',                                  // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss',                       // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS',                        // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW',                             // <input type=\"week\" />\n        MONTH: 'YYYY-MM'                                // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n","// Utilities\n//\n'use strict';\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction isString(obj) { return _class(obj) === '[object String]'; }\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction has(object, key) {\n  return _hasOwnProperty.call(object, key);\n}\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n\n  sources.forEach(function (source) {\n    if (!source) { return; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be object');\n    }\n\n    Object.keys(source).forEach(function (key) {\n      obj[key] = source[key];\n    });\n  });\n\n  return obj;\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt(src, pos, newElements) {\n  return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isValidEntityCode(c) {\n  /*eslint no-bitwise:0*/\n  // broken sequence\n  if (c >= 0xD800 && c <= 0xDFFF) { return false; }\n  // never used\n  if (c >= 0xFDD0 && c <= 0xFDEF) { return false; }\n  if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false; }\n  // control codes\n  if (c >= 0x00 && c <= 0x08) { return false; }\n  if (c === 0x0B) { return false; }\n  if (c >= 0x0E && c <= 0x1F) { return false; }\n  if (c >= 0x7F && c <= 0x9F) { return false; }\n  // out of range\n  if (c > 0x10FFFF) { return false; }\n  return true;\n}\n\nfunction fromCodePoint(c) {\n  /*eslint no-bitwise:0*/\n  if (c > 0xffff) {\n    c -= 0x10000;\n    var surrogate1 = 0xd800 + (c >> 10),\n        surrogate2 = 0xdc00 + (c & 0x3ff);\n\n    return String.fromCharCode(surrogate1, surrogate2);\n  }\n  return String.fromCharCode(c);\n}\n\n\nvar UNESCAPE_MD_RE  = /\\\\([!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar ENTITY_RE       = /&([a-z#][a-z0-9]{1,31});/gi;\nvar UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');\n\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;\n\nvar entities = require('./entities');\n\nfunction replaceEntityPattern(match, name) {\n  var code = 0;\n\n  if (has(entities, name)) {\n    return entities[name];\n  }\n\n  if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n    code = name[1].toLowerCase() === 'x' ?\n      parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n\n    if (isValidEntityCode(code)) {\n      return fromCodePoint(code);\n    }\n  }\n\n  return match;\n}\n\n/*function replaceEntities(str) {\n  if (str.indexOf('&') < 0) { return str; }\n\n  return str.replace(ENTITY_RE, replaceEntityPattern);\n}*/\n\nfunction unescapeMd(str) {\n  if (str.indexOf('\\\\') < 0) { return str; }\n  return str.replace(UNESCAPE_MD_RE, '$1');\n}\n\nfunction unescapeAll(str) {\n  if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str; }\n\n  return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n    if (escaped) { return escaped; }\n    return replaceEntityPattern(match, entity);\n  });\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;'\n};\n\nfunction replaceUnsafeChar(ch) {\n  return HTML_REPLACEMENTS[ch];\n}\n\nfunction escapeHtml(str) {\n  if (HTML_ESCAPE_TEST_RE.test(str)) {\n    return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n  }\n  return str;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\n\nfunction escapeRE(str) {\n  return str.replace(REGEXP_ESCAPE_RE, '\\\\$&');\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isSpace(code) {\n  switch (code) {\n    case 0x09:\n    case 0x20:\n      return true;\n  }\n  return false;\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace(code) {\n  if (code >= 0x2000 && code <= 0x200A) { return true; }\n  switch (code) {\n    case 0x09: // \\t\n    case 0x0A: // \\n\n    case 0x0B: // \\v\n    case 0x0C: // \\f\n    case 0x0D: // \\r\n    case 0x20:\n    case 0xA0:\n    case 0x1680:\n    case 0x202F:\n    case 0x205F:\n    case 0x3000:\n      return true;\n  }\n  return false;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n/*eslint-disable max-len*/\nvar UNICODE_PUNCT_RE = require('uc.micro/categories/P/regex');\n\n// Currently without astral characters support.\nfunction isPunctChar(ch) {\n  return UNICODE_PUNCT_RE.test(ch);\n}\n\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct(ch) {\n  switch (ch) {\n    case 0x21/* ! */:\n    case 0x22/* \" */:\n    case 0x23/* # */:\n    case 0x24/* $ */:\n    case 0x25/* % */:\n    case 0x26/* & */:\n    case 0x27/* ' */:\n    case 0x28/* ( */:\n    case 0x29/* ) */:\n    case 0x2A/* * */:\n    case 0x2B/* + */:\n    case 0x2C/* , */:\n    case 0x2D/* - */:\n    case 0x2E/* . */:\n    case 0x2F/* / */:\n    case 0x3A/* : */:\n    case 0x3B/* ; */:\n    case 0x3C/* < */:\n    case 0x3D/* = */:\n    case 0x3E/* > */:\n    case 0x3F/* ? */:\n    case 0x40/* @ */:\n    case 0x5B/* [ */:\n    case 0x5C/* \\ */:\n    case 0x5D/* ] */:\n    case 0x5E/* ^ */:\n    case 0x5F/* _ */:\n    case 0x60/* ` */:\n    case 0x7B/* { */:\n    case 0x7C/* | */:\n    case 0x7D/* } */:\n    case 0x7E/* ~ */:\n      return true;\n    default:\n      return false;\n  }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference(str) {\n  // Trim and collapse whitespace\n  //\n  str = str.trim().replace(/\\s+/g, ' ');\n\n  // In node v10 'ẞ'.toLowerCase() === 'Ṿ', which is presumed to be a bug\n  // fixed in v12 (couldn't find any details).\n  //\n  // So treat this one as a special case\n  // (remove this when node v10 is no longer supported).\n  //\n  if ('ẞ'.toLowerCase() === 'Ṿ') {\n    str = str.replace(/ẞ/g, 'ß');\n  }\n\n  // .toLowerCase().toUpperCase() should get rid of all differences\n  // between letter variants.\n  //\n  // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n  // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n  // İ, ϴ, ẞ, Ω, K, Å - those are already uppercased, but have differently\n  // uppercased versions).\n  //\n  // Here's an example showing how it happens. Lets take greek letter omega:\n  // uppercase U+0398 (Θ), U+03f4 (ϴ) and lowercase U+03b8 (θ), U+03d1 (ϑ)\n  //\n  // Unicode entries:\n  // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n  // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n  // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n  // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n  //\n  // Case-insensitive comparison should treat all of them as equivalent.\n  //\n  // But .toLowerCase() doesn't change ϑ (it's already lowercase),\n  // and .toUpperCase() doesn't change ϴ (already uppercase).\n  //\n  // Applying first lower then upper case normalizes any character:\n  // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n  //\n  // Note: this is equivalent to unicode case folding; unicode normalization\n  // is a different step that is not required here.\n  //\n  // Final result should be uppercased, because it's later stored in an object\n  // (this avoid a conflict with Object.prototype members,\n  // most notably, `__proto__`)\n  //\n  return str.toLowerCase().toUpperCase();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nexports.lib                 = {};\nexports.lib.mdurl           = require('mdurl');\nexports.lib.ucmicro         = require('uc.micro');\n\nexports.assign              = assign;\nexports.isString            = isString;\nexports.has                 = has;\nexports.unescapeMd          = unescapeMd;\nexports.unescapeAll         = unescapeAll;\nexports.isValidEntityCode   = isValidEntityCode;\nexports.fromCodePoint       = fromCodePoint;\n// exports.replaceEntities     = replaceEntities;\nexports.escapeHtml          = escapeHtml;\nexports.arrayReplaceAt      = arrayReplaceAt;\nexports.isSpace             = isSpace;\nexports.isWhiteSpace        = isWhiteSpace;\nexports.isMdAsciiPunct      = isMdAsciiPunct;\nexports.isPunctChar         = isPunctChar;\nexports.escapeRE            = escapeRE;\nexports.normalizeReference  = normalizeReference;\n","// This file defines a number of table-related commands.\n\nimport {TextSelection} from \"prosemirror-state\"\nimport {Fragment} from \"prosemirror-model\"\n\nimport {Rect, TableMap} from \"./tablemap\"\nimport {CellSelection} from \"./cellselection\"\nimport {\n  addColSpan,\n  cellAround,\n  cellWrapping,\n  columnIsHeader,\n  isInTable,\n  moveCellForward,\n  removeColSpan,\n  selectionCell,\n  setAttr\n} from \"./util\"\nimport {tableNodeTypes} from \"./schema\"\n\n// Helper to get the selected rectangle in a table, if any. Adds table\n// map, table node, and table start offset to the object for\n// convenience.\nexport function selectedRect(state) {\n  let sel = state.selection, $pos = selectionCell(state)\n  let table = $pos.node(-1), tableStart = $pos.start(-1), map = TableMap.get(table)\n  let rect\n  if (sel instanceof CellSelection)\n    rect = map.rectBetween(sel.$anchorCell.pos - tableStart, sel.$headCell.pos - tableStart)\n  else\n    rect = map.findCell($pos.pos - tableStart)\n  rect.tableStart = tableStart\n  rect.map = map\n  rect.table = table\n  return rect\n}\n\n// Add a column at the given position in a table.\nexport function addColumn(tr, {map, tableStart, table}, col) {\n  let refColumn = col > 0 ? -1 : 0\n  if (columnIsHeader(map, table, col + refColumn))\n    refColumn = col == 0 || col == map.width ? null : 0\n\n  for (let row = 0; row < map.height; row++) {\n    let index = row * map.width + col\n    // If this position falls inside a col-spanning cell\n    if (col > 0 && col < map.width && map.map[index - 1] == map.map[index]) {\n      let pos = map.map[index], cell = table.nodeAt(pos)\n      tr.setNodeMarkup(tr.mapping.map(tableStart + pos), null,\n                       addColSpan(cell.attrs, col - map.colCount(pos)))\n      // Skip ahead if rowspan > 1\n      row += cell.attrs.rowspan - 1\n    } else {\n      let type = refColumn == null ? tableNodeTypes(table.type.schema).cell\n          : table.nodeAt(map.map[index + refColumn]).type\n      let pos = map.positionAt(row, col, table)\n      tr.insert(tr.mapping.map(tableStart + pos), type.createAndFill())\n    }\n  }\n  return tr\n}\n\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Command to add a column before the column with the selection.\nexport function addColumnBefore(state, dispatch) {\n  if (!isInTable(state)) return false\n  if (dispatch) {\n    let rect = selectedRect(state)\n    dispatch(addColumn(state.tr, rect, rect.left))\n  }\n  return true\n}\n\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Command to add a column after the column with the selection.\nexport function addColumnAfter(state, dispatch) {\n  if (!isInTable(state)) return false\n  if (dispatch) {\n    let rect = selectedRect(state)\n    dispatch(addColumn(state.tr, rect, rect.right))\n  }\n  return true\n}\n\nexport function removeColumn(tr, {map, table, tableStart}, col) {\n  let mapStart = tr.mapping.maps.length\n  for (let row = 0; row < map.height;) {\n    let index = row * map.width + col, pos = map.map[index], cell = table.nodeAt(pos)\n    // If this is part of a col-spanning cell\n    if ((col > 0 && map.map[index - 1] == pos) || (col < map.width - 1 && map.map[index + 1] == pos)) {\n      tr.setNodeMarkup(tr.mapping.slice(mapStart).map(tableStart + pos), null,\n                       removeColSpan(cell.attrs, col - map.colCount(pos)))\n    } else {\n      let start = tr.mapping.slice(mapStart).map(tableStart + pos)\n      tr.delete(start, start + cell.nodeSize)\n    }\n    row += cell.attrs.rowspan\n  }\n}\n\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Command function that removes the selected columns from a table.\nexport function deleteColumn(state, dispatch) {\n  if (!isInTable(state)) return false\n  if (dispatch) {\n    let rect = selectedRect(state), tr = state.tr\n    if (rect.left == 0 && rect.right == rect.map.width) return false\n    for (let i = rect.right - 1;; i--) {\n      removeColumn(tr, rect, i)\n      if (i == rect.left) break\n      rect.table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc\n      rect.map = TableMap.get(rect.table)\n    }\n    dispatch(tr)\n  }\n  return true\n}\n\nexport function rowIsHeader(map, table, row) {\n  let headerCell = tableNodeTypes(table.type.schema).header_cell\n  for (let col = 0; col < map.width; col++)\n    if (table.nodeAt(map.map[col + row * map.width]).type != headerCell)\n      return false\n  return true\n}\n\nexport function addRow(tr, {map, tableStart, table}, row) {\n  let rowPos = tableStart\n  for (let i = 0; i < row; i++) rowPos += table.child(i).nodeSize\n  let cells = [], refRow = row > 0 ? -1 : 0\n  if (rowIsHeader(map, table, row + refRow))\n    refRow = row == 0 || row == map.height ? null : 0\n  for (let col = 0, index = map.width * row; col < map.width; col++, index++) {\n    // Covered by a rowspan cell\n    if (row > 0 && row < map.height && map.map[index] == map.map[index - map.width]) {\n      let pos = map.map[index], attrs = table.nodeAt(pos).attrs\n      tr.setNodeMarkup(tableStart + pos, null, setAttr(attrs, \"rowspan\", attrs.rowspan + 1))\n      col += attrs.colspan - 1\n    } else {\n      let type = refRow == null ? tableNodeTypes(table.type.schema).cell\n          : table.nodeAt(map.map[index + refRow * map.width]).type\n      cells.push(type.createAndFill())\n    }\n  }\n  tr.insert(rowPos, tableNodeTypes(table.type.schema).row.create(null, cells))\n  return tr\n}\n\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Add a table row before the selection.\nexport function addRowBefore(state, dispatch) {\n  if (!isInTable(state)) return false\n  if (dispatch) {\n    let rect = selectedRect(state)\n    dispatch(addRow(state.tr, rect, rect.top))\n  }\n  return true\n}\n\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Add a table row after the selection.\nexport function addRowAfter(state, dispatch) {\n  if (!isInTable(state)) return false\n  if (dispatch) {\n    let rect = selectedRect(state)\n    dispatch(addRow(state.tr, rect, rect.bottom))\n  }\n  return true\n}\n\nexport function removeRow(tr, {map, table, tableStart}, row) {\n  let rowPos = 0\n  for (let i = 0; i < row; i++) rowPos += table.child(i).nodeSize\n  let nextRow = rowPos + table.child(row).nodeSize\n\n  let mapFrom = tr.mapping.maps.length\n  tr.delete(rowPos + tableStart, nextRow + tableStart)\n\n  for (let col = 0, index = row * map.width; col < map.width; col++, index++) {\n    let pos = map.map[index]\n    if (row > 0 && pos == map.map[index - map.width]) {\n      // If this cell starts in the row above, simply reduce its rowspan\n      let attrs = table.nodeAt(pos).attrs\n      tr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + tableStart), null, setAttr(attrs, \"rowspan\", attrs.rowspan - 1))\n      col += attrs.colspan - 1\n    } else if (row < map.width && pos == map.map[index + map.width]) {\n      // Else, if it continues in the row below, it has to be moved down\n      let cell = table.nodeAt(pos)\n      let copy = cell.type.create(setAttr(cell.attrs, \"rowspan\", cell.attrs.rowspan - 1), cell.content)\n      let newPos = map.positionAt(row + 1, col, table)\n      tr.insert(tr.mapping.slice(mapFrom).map(tableStart + newPos), copy)\n      col += cell.attrs.colspan - 1\n    }\n  }\n}\n\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Remove the selected rows from a table.\nexport function deleteRow(state, dispatch) {\n  if (!isInTable(state)) return false\n  if (dispatch) {\n    let rect = selectedRect(state), tr = state.tr\n    if (rect.top == 0 && rect.bottom == rect.map.height) return false\n    for (let i = rect.bottom - 1;; i--) {\n      removeRow(tr, rect, i)\n      if (i == rect.top) break\n      rect.table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc\n      rect.map = TableMap.get(rect.table)\n    }\n    dispatch(tr)\n  }\n  return true\n}\n\nfunction isEmpty(cell) {\n  let c = cell.content\n  return c.childCount == 1 && c.firstChild.isTextblock && c.firstChild.childCount == 0\n}\n\nfunction cellsOverlapRectangle({width, height, map}, rect) {\n  let indexTop = rect.top * width + rect.left, indexLeft = indexTop\n  let indexBottom = (rect.bottom - 1) * width + rect.left, indexRight = indexTop + (rect.right - rect.left - 1)\n  for (let i = rect.top; i < rect.bottom; i++) {\n    if (rect.left > 0 && map[indexLeft] == map[indexLeft - 1] ||\n        rect.right < width && map[indexRight] == map[indexRight + 1]) return true\n    indexLeft += width; indexRight += width\n  }\n  for (let i = rect.left; i < rect.right; i++) {\n    if (rect.top > 0 && map[indexTop] == map[indexTop - width] ||\n        rect.bottom < height && map[indexBottom] == map[indexBottom + width]) return true\n    indexTop++; indexBottom++\n  }\n  return false\n}\n\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Merge the selected cells into a single cell. Only available when\n// the selected cells' outline forms a rectangle.\nexport function mergeCells(state, dispatch) {\n  let sel = state.selection\n  if (!(sel instanceof CellSelection) || sel.$anchorCell.pos == sel.$headCell.pos) return false\n  let rect = selectedRect(state), {map} = rect\n  if (cellsOverlapRectangle(map, rect)) return false\n  if (dispatch) {\n    let tr = state.tr, seen = {}, content = Fragment.empty, mergedPos, mergedCell\n    for (let row = rect.top; row < rect.bottom; row++) {\n      for (let col = rect.left; col < rect.right; col++) {\n        let cellPos = map.map[row * map.width + col], cell = rect.table.nodeAt(cellPos)\n        if (seen[cellPos]) continue\n        seen[cellPos] = true\n        if (mergedPos == null) {\n          mergedPos = cellPos\n          mergedCell = cell\n        } else {\n          if (!isEmpty(cell)) content = content.append(cell.content)\n          let mapped = tr.mapping.map(cellPos + rect.tableStart)\n          tr.delete(mapped, mapped + cell.nodeSize)\n        }\n      }\n    }\n    tr.setNodeMarkup(mergedPos + rect.tableStart, null,\n                     setAttr(addColSpan(mergedCell.attrs, mergedCell.attrs.colspan, (rect.right - rect.left) - mergedCell.attrs.colspan),\n                             \"rowspan\", rect.bottom - rect.top))\n    if (content.size) {\n      let end = mergedPos + 1 + mergedCell.content.size\n      let start = isEmpty(mergedCell) ? mergedPos + 1 : end\n      tr.replaceWith(start + rect.tableStart, end + rect.tableStart, content)\n    }\n    tr.setSelection(new CellSelection(tr.doc.resolve(mergedPos + rect.tableStart)))\n    dispatch(tr)\n  }\n  return true\n}\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Split a selected cell, whose rowpan or colspan is greater than one,\n// into smaller cells. Use the first cell type for the new cells.\nexport function splitCell(state, dispatch) {\n  const nodeTypes = tableNodeTypes(state.schema);\n  return splitCellWithType(({\n    node,\n  }) => {\n    return nodeTypes[node.type.spec.tableRole]\n  })(state, dispatch)\n}\n\n// :: (getCellType: ({ row: number, col: number, node: Node}) → NodeType) → (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Split a selected cell, whose rowpan or colspan is greater than one,\n// into smaller cells with the cell type (th, td) returned by getType function.\nexport function splitCellWithType(getCellType) {\n  return (state, dispatch) => {\n    let sel = state.selection\n    let cellNode, cellPos\n    if (!(sel instanceof CellSelection)) {\n      cellNode = cellWrapping(sel.$from)\n      if (!cellNode) return false\n      cellPos = cellAround(sel.$from).pos\n    } else {\n      if (sel.$anchorCell.pos != sel.$headCell.pos) return false\n      cellNode = sel.$anchorCell.nodeAfter\n      cellPos = sel.$anchorCell.pos\n    }\n    if (cellNode.attrs.colspan == 1 && cellNode.attrs.rowspan == 1) {return false}\n    if (dispatch) {\n      let baseAttrs = cellNode.attrs, attrs = [], colwidth = baseAttrs.colwidth\n      if (baseAttrs.rowspan > 1) baseAttrs = setAttr(baseAttrs, \"rowspan\", 1)\n      if (baseAttrs.colspan > 1) baseAttrs = setAttr(baseAttrs, \"colspan\", 1)\n      let rect = selectedRect(state), tr = state.tr\n      for (let i = 0; i < rect.right - rect.left; i++)\n        attrs.push(colwidth ? setAttr(baseAttrs, \"colwidth\", colwidth && colwidth[i] ? [colwidth[i]] : null) : baseAttrs)\n      let lastCell;\n      for (let row = rect.top; row < rect.bottom; row++) {\n        let pos = rect.map.positionAt(row, rect.left, rect.table)\n        if (row == rect.top) pos += cellNode.nodeSize\n        for (let col = rect.left, i = 0; col < rect.right; col++, i++) {\n          if (col == rect.left && row == rect.top) continue\n          tr.insert(lastCell = tr.mapping.map(pos + rect.tableStart, 1), getCellType({ node: cellNode, row, col}).createAndFill(attrs[i]))\n        }\n      }\n      tr.setNodeMarkup(cellPos, getCellType({ node: cellNode, row: rect.top, col: rect.left}), attrs[0])\n      if (sel instanceof CellSelection)\n        tr.setSelection(new CellSelection(tr.doc.resolve(sel.$anchorCell.pos),\n                                          lastCell && tr.doc.resolve(lastCell)))\n      dispatch(tr)\n    }\n    return true\n  }\n}\n\n// :: (string, any) → (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Returns a command that sets the given attribute to the given value,\n// and is only available when the currently selected cell doesn't\n// already have that attribute set to that value.\nexport function setCellAttr(name, value) {\n  return function(state, dispatch) {\n    if (!isInTable(state)) return false\n    let $cell = selectionCell(state)\n    if ($cell.nodeAfter.attrs[name] === value) return false\n    if (dispatch) {\n      let tr = state.tr\n      if (state.selection instanceof CellSelection)\n        state.selection.forEachCell((node, pos) => {\n          if (node.attrs[name] !== value)\n            tr.setNodeMarkup(pos, null, setAttr(node.attrs, name, value))\n        })\n      else\n        tr.setNodeMarkup($cell.pos, null, setAttr($cell.nodeAfter.attrs, name, value))\n      dispatch(tr)\n    }\n    return true\n  }\n}\n\nfunction deprecated_toggleHeader(type) {\n  return function(state, dispatch) {\n    if (!isInTable(state)) return false\n    if (dispatch) {\n      let types = tableNodeTypes(state.schema)\n      let rect = selectedRect(state), tr = state.tr\n      let cells = rect.map.cellsInRect(type == \"column\" ? new Rect(rect.left, 0, rect.right, rect.map.height) :\n                                       type == \"row\" ? new Rect(0, rect.top, rect.map.width, rect.bottom) : rect)\n      let nodes = cells.map(pos => rect.table.nodeAt(pos))\n      for (let i = 0; i < cells.length; i++) // Remove headers, if any\n        if (nodes[i].type == types.header_cell)\n          tr.setNodeMarkup(rect.tableStart + cells[i], types.cell, nodes[i].attrs)\n      if (tr.steps.length == 0) for (let i = 0; i < cells.length; i++) // No headers removed, add instead\n        tr.setNodeMarkup(rect.tableStart + cells[i], types.header_cell, nodes[i].attrs)\n      dispatch(tr)\n    }\n    return true\n  }\n}\n\nfunction isHeaderEnabledByType(type, rect, types) {\n  // Get cell positions for first row or first column\n  const cellPositions = rect.map.cellsInRect({\n    left: 0,\n    top: 0,\n    right: type == \"row\" ? rect.map.width : 1,\n    bottom: type == \"column\" ? rect.map.height : 1,\n  })\n\n  for (let i = 0; i < cellPositions.length; i++) {\n    const cell = rect.table.nodeAt(cellPositions[i])\n    if (cell && cell.type !== types.header_cell) {\n      return false\n    }\n  }\n\n  return true\n}\n\n// :: (string, ?{ useDeprecatedLogic: bool }) → (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Toggles between row/column header and normal cells (Only applies to first row/column).\n// For deprecated behavior pass `useDeprecatedLogic` in options with true.\nexport function toggleHeader(type, options) {\n  options = options || { useDeprecatedLogic: false }\n\n  if (options.useDeprecatedLogic)\n    return deprecated_toggleHeader(type)\n\n  return function(state, dispatch) {\n    if (!isInTable(state)) return false\n    if (dispatch) {\n      let types = tableNodeTypes(state.schema)\n      let rect = selectedRect(state), tr = state.tr\n\n      let isHeaderRowEnabled = isHeaderEnabledByType(\"row\", rect, types)\n      let isHeaderColumnEnabled = isHeaderEnabledByType(\"column\", rect, types)\n\n      let isHeaderEnabled = type === \"column\" ? isHeaderRowEnabled :\n                            type === \"row\"    ? isHeaderColumnEnabled : false\n\n      let selectionStartsAt = isHeaderEnabled ? 1 : 0\n\n      let cellsRect = type == \"column\" ? new Rect(0, selectionStartsAt, 1, rect.map.height) :\n                      type == \"row\" ? new Rect(selectionStartsAt, 0, rect.map.width, 1) : rect\n\n      let newType = type == \"column\" ? isHeaderColumnEnabled ? types.cell : types.header_cell :\n                    type == \"row\" ? isHeaderRowEnabled ? types.cell : types.header_cell : types.cell\n\n      rect.map.cellsInRect(cellsRect).forEach(relativeCellPos => {\n        const cellPos = relativeCellPos + rect.tableStart\n        const cell = tr.doc.nodeAt(cellPos)\n\n        if (cell) {\n          tr.setNodeMarkup(cellPos, newType, cell.attrs)\n        }\n      })\n\n      dispatch(tr)\n    }\n    return true\n  }\n}\n\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Toggles whether the selected row contains header cells.\nexport let toggleHeaderRow = toggleHeader(\"row\", { useDeprecatedLogic: true })\n\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Toggles whether the selected column contains header cells.\nexport let toggleHeaderColumn = toggleHeader(\"column\", { useDeprecatedLogic: true })\n\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Toggles whether the selected cells are header cells.\nexport let toggleHeaderCell = toggleHeader(\"cell\", { useDeprecatedLogic: true })\n\nfunction findNextCell($cell, dir) {\n  if (dir < 0) {\n    let before = $cell.nodeBefore\n    if (before) return $cell.pos - before.nodeSize\n    for (let row = $cell.index(-1) - 1, rowEnd = $cell.before(); row >= 0; row--) {\n      let rowNode = $cell.node(-1).child(row)\n      if (rowNode.childCount) return rowEnd - 1 - rowNode.lastChild.nodeSize\n      rowEnd -= rowNode.nodeSize\n    }\n  } else {\n    if ($cell.index() < $cell.parent.childCount - 1) return $cell.pos + $cell.nodeAfter.nodeSize\n    let table = $cell.node(-1)\n    for (let row = $cell.indexAfter(-1), rowStart = $cell.after(); row < table.childCount; row++) {\n      let rowNode = table.child(row)\n      if (rowNode.childCount) return rowStart + 1\n      rowStart += rowNode.nodeSize\n    }\n  }\n}\n\n// :: (number) → (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Returns a command for selecting the next (direction=1) or previous\n// (direction=-1) cell in a table.\nexport function goToNextCell(direction) {\n  return function(state, dispatch) {\n    if (!isInTable(state)) return false\n    let cell = findNextCell(selectionCell(state), direction)\n    if (cell == null) return\n    if (dispatch) {\n      let $cell = state.doc.resolve(cell)\n      dispatch(state.tr.setSelection(TextSelection.between($cell, moveCellForward($cell))).scrollIntoView())\n    }\n    return true\n  }\n}\n\n// :: (EditorState, ?(tr: Transaction)) → bool\n// Deletes the table around the selection, if any.\nexport function deleteTable(state, dispatch) {\n  let $pos = state.selection.$anchor\n  for (let d = $pos.depth; d > 0; d--) {\n    let node = $pos.node(d)\n    if (node.type.spec.tableRole == \"table\") {\n      if (dispatch) dispatch(state.tr.delete($pos.before(d), $pos.after(d)).scrollIntoView())\n      return true\n    }\n  }\n  return false\n}\n","import { Selection } from 'prosemirror-state';\nimport { equalNodeType, isNodeSelection } from './helpers';\n\n// :: (predicate: (node: ProseMirrorNode) → boolean) → (selection: Selection) → ?{pos: number, start: number, depth: number, node: ProseMirrorNode}\n// Iterates over parent nodes, returning the closest node and its start position `predicate` returns truthy for. `start` points to the start position of the node, `pos` points directly before the node.\n//\n// ```javascript\n// const predicate = node => node.type === schema.nodes.blockquote;\n// const parent = findParentNode(predicate)(selection);\n// ```\nexport const findParentNode = predicate => ({ $from }) =>\n  findParentNodeClosestToPos($from, predicate);\n\n// :: ($pos: ResolvedPos, predicate: (node: ProseMirrorNode) → boolean) → ?{pos: number, start: number, depth: number, node: ProseMirrorNode}\n// Iterates over parent nodes starting from the given `$pos`, returning the closest node and its start position `predicate` returns truthy for. `start` points to the start position of the node, `pos` points directly before the node.\n//\n// ```javascript\n// const predicate = node => node.type === schema.nodes.blockquote;\n// const parent = findParentNodeClosestToPos(state.doc.resolve(5), predicate);\n// ```\nexport const findParentNodeClosestToPos = ($pos, predicate) => {\n  for (let i = $pos.depth; i > 0; i--) {\n    const node = $pos.node(i);\n    if (predicate(node)) {\n      return {\n        pos: i > 0 ? $pos.before(i) : 0,\n        start: $pos.start(i),\n        depth: i,\n        node\n      };\n    }\n  }\n};\n\n// :: (predicate: (node: ProseMirrorNode) → boolean, domAtPos: (pos: number) → {node: dom.Node, offset: number}) → (selection: Selection) → ?dom.Node\n// Iterates over parent nodes, returning DOM reference of the closest node `predicate` returns truthy for.\n//\n// ```javascript\n// const domAtPos = view.domAtPos.bind(view);\n// const predicate = node => node.type === schema.nodes.table;\n// const parent = findParentDomRef(predicate, domAtPos)(selection); // <table>\n// ```\nexport const findParentDomRef = (predicate, domAtPos) => selection => {\n  const parent = findParentNode(predicate)(selection);\n  if (parent) {\n    return findDomRefAtPos(parent.pos, domAtPos);\n  }\n};\n\n// :: (predicate: (node: ProseMirrorNode) → boolean) → (selection: Selection) → boolean\n// Checks if there's a parent node `predicate` returns truthy for.\n//\n// ```javascript\n// if (hasParentNode(node => node.type === schema.nodes.table)(selection)) {\n//   // ....\n// }\n// ```\nexport const hasParentNode = predicate => selection => {\n  return !!findParentNode(predicate)(selection);\n};\n\n// :: (nodeType: union<NodeType, [NodeType]>) → (selection: Selection) → ?{pos: number, start: number, depth: number, node: ProseMirrorNode}\n// Iterates over parent nodes, returning closest node of a given `nodeType`. `start` points to the start position of the node, `pos` points directly before the node.\n//\n// ```javascript\n// const parent = findParentNodeOfType(schema.nodes.paragraph)(selection);\n// ```\nexport const findParentNodeOfType = nodeType => selection => {\n  return findParentNode(node => equalNodeType(nodeType, node))(selection);\n};\n\n// :: ($pos: ResolvedPos, nodeType: union<NodeType, [NodeType]>) → ?{pos: number, start: number, depth: number, node: ProseMirrorNode}\n// Iterates over parent nodes starting from the given `$pos`, returning closest node of a given `nodeType`. `start` points to the start position of the node, `pos` points directly before the node.\n//\n// ```javascript\n// const parent = findParentNodeOfTypeClosestToPos(state.doc.resolve(10), schema.nodes.paragraph);\n// ```\nexport const findParentNodeOfTypeClosestToPos = ($pos, nodeType) => {\n  return findParentNodeClosestToPos($pos, node =>\n    equalNodeType(nodeType, node)\n  );\n};\n\n// :: (nodeType: union<NodeType, [NodeType]>) → (selection: Selection) → boolean\n// Checks if there's a parent node of a given `nodeType`.\n//\n// ```javascript\n// if (hasParentNodeOfType(schema.nodes.table)(selection)) {\n//   // ....\n// }\n// ```\nexport const hasParentNodeOfType = nodeType => selection => {\n  return hasParentNode(node => equalNodeType(nodeType, node))(selection);\n};\n\n// :: (nodeType: union<NodeType, [NodeType]>, domAtPos: (pos: number) → {node: dom.Node, offset: number}) → (selection: Selection) → ?dom.Node\n// Iterates over parent nodes, returning DOM reference of the closest node of a given `nodeType`.\n//\n// ```javascript\n// const domAtPos = view.domAtPos.bind(view);\n// const parent = findParentDomRefOfType(schema.nodes.codeBlock, domAtPos)(selection); // <pre>\n// ```\nexport const findParentDomRefOfType = (nodeType, domAtPos) => selection => {\n  return findParentDomRef(node => equalNodeType(nodeType, node), domAtPos)(\n    selection\n  );\n};\n\n// :: (nodeType: union<NodeType, [NodeType]>) → (selection: Selection) → ?{pos: number, start: number, depth: number, node: ProseMirrorNode}\n// Returns a node of a given `nodeType` if it is selected. `start` points to the start position of the node, `pos` points directly before the node.\n//\n// ```javascript\n// const { extension, inlineExtension, bodiedExtension } = schema.nodes;\n// const selectedNode = findSelectedNodeOfType([\n//   extension,\n//   inlineExtension,\n//   bodiedExtension,\n// ])(selection);\n// ```\nexport const findSelectedNodeOfType = nodeType => selection => {\n  if (isNodeSelection(selection)) {\n    const { node, $from } = selection;\n    if (equalNodeType(nodeType, node)) {\n      return { node, pos: $from.pos, depth: $from.depth };\n    }\n  }\n};\n\n// :: (selection: Selection) → ?number\n// Returns position of the previous node.\n//\n// ```javascript\n// const pos = findPositionOfNodeBefore(tr.selection);\n// ```\nexport const findPositionOfNodeBefore = selection => {\n  const { nodeBefore } = selection.$from;\n  const maybeSelection = Selection.findFrom(selection.$from, -1);\n  if (maybeSelection && nodeBefore) {\n    // leaf node\n    const parent = findParentNodeOfType(nodeBefore.type)(maybeSelection);\n    if (parent) {\n      return parent.pos;\n    }\n    return maybeSelection.$from.pos;\n  }\n};\n\n// :: (position: number, domAtPos: (pos: number) → {node: dom.Node, offset: number}) → dom.Node\n// Returns DOM reference of a node at a given `position`. If the node type is of type `TEXT_NODE` it will return the reference of the parent node.\n//\n// ```javascript\n// const domAtPos = view.domAtPos.bind(view);\n// const ref = findDomRefAtPos($from.pos, domAtPos);\n// ```\nexport const findDomRefAtPos = (position, domAtPos) => {\n  const dom = domAtPos(position);\n  const node = dom.node.childNodes[dom.offset];\n\n  if (dom.node.nodeType === Node.TEXT_NODE) {\n    return dom.node.parentNode;\n  }\n\n  if (!node || node.nodeType === Node.TEXT_NODE) {\n    return dom.node;\n  }\n\n  return node;\n};\n","import {Transform} from \"prosemirror-transform\"\nimport {Mark} from \"prosemirror-model\"\nimport {Selection} from \"./selection\"\n\nconst UPDATED_SEL = 1, UPDATED_MARKS = 2, UPDATED_SCROLL = 4\n\n// ::- An editor state transaction, which can be applied to a state to\n// create an updated state. Use\n// [`EditorState.tr`](#state.EditorState.tr) to create an instance.\n//\n// Transactions track changes to the document (they are a subclass of\n// [`Transform`](#transform.Transform)), but also other state changes,\n// like selection updates and adjustments of the set of [stored\n// marks](#state.EditorState.storedMarks). In addition, you can store\n// metadata properties in a transaction, which are extra pieces of\n// information that client code or plugins can use to describe what a\n// transacion represents, so that they can update their [own\n// state](#state.StateField) accordingly.\n//\n// The [editor view](#view.EditorView) uses a few metadata properties:\n// it will attach a property `\"pointer\"` with the value `true` to\n// selection transactions directly caused by mouse or touch input, and\n// a `\"uiEvent\"` property of that may be `\"paste\"`, `\"cut\"`, or `\"drop\"`.\nexport class Transaction extends Transform {\n  constructor(state) {\n    super(state.doc)\n    // :: number\n    // The timestamp associated with this transaction, in the same\n    // format as `Date.now()`.\n    this.time = Date.now()\n    this.curSelection = state.selection\n    // The step count for which the current selection is valid.\n    this.curSelectionFor = 0\n    // :: ?[Mark]\n    // The stored marks set by this transaction, if any.\n    this.storedMarks = state.storedMarks\n    // Bitfield to track which aspects of the state were updated by\n    // this transaction.\n    this.updated = 0\n    // Object used to store metadata properties for the transaction.\n    this.meta = Object.create(null)\n  }\n\n  // :: Selection\n  // The transaction's current selection. This defaults to the editor\n  // selection [mapped](#state.Selection.map) through the steps in the\n  // transaction, but can be overwritten with\n  // [`setSelection`](#state.Transaction.setSelection).\n  get selection() {\n    if (this.curSelectionFor < this.steps.length) {\n      this.curSelection = this.curSelection.map(this.doc, this.mapping.slice(this.curSelectionFor))\n      this.curSelectionFor = this.steps.length\n    }\n    return this.curSelection\n  }\n\n  // :: (Selection) → Transaction\n  // Update the transaction's current selection. Will determine the\n  // selection that the editor gets when the transaction is applied.\n  setSelection(selection) {\n    if (selection.$from.doc != this.doc)\n      throw new RangeError(\"Selection passed to setSelection must point at the current document\")\n    this.curSelection = selection\n    this.curSelectionFor = this.steps.length\n    this.updated = (this.updated | UPDATED_SEL) & ~UPDATED_MARKS\n    this.storedMarks = null\n    return this\n  }\n\n  // :: bool\n  // Whether the selection was explicitly updated by this transaction.\n  get selectionSet() {\n    return (this.updated & UPDATED_SEL) > 0\n  }\n\n  // :: (?[Mark]) → Transaction\n  // Set the current stored marks.\n  setStoredMarks(marks) {\n    this.storedMarks = marks\n    this.updated |= UPDATED_MARKS\n    return this\n  }\n\n  // :: ([Mark]) → Transaction\n  // Make sure the current stored marks or, if that is null, the marks\n  // at the selection, match the given set of marks. Does nothing if\n  // this is already the case.\n  ensureMarks(marks) {\n    if (!Mark.sameSet(this.storedMarks || this.selection.$from.marks(), marks))\n      this.setStoredMarks(marks)\n    return this\n  }\n\n  // :: (Mark) → Transaction\n  // Add a mark to the set of stored marks.\n  addStoredMark(mark) {\n    return this.ensureMarks(mark.addToSet(this.storedMarks || this.selection.$head.marks()))\n  }\n\n  // :: (union<Mark, MarkType>) → Transaction\n  // Remove a mark or mark type from the set of stored marks.\n  removeStoredMark(mark) {\n    return this.ensureMarks(mark.removeFromSet(this.storedMarks || this.selection.$head.marks()))\n  }\n\n  // :: bool\n  // Whether the stored marks were explicitly set for this transaction.\n  get storedMarksSet() {\n    return (this.updated & UPDATED_MARKS) > 0\n  }\n\n  addStep(step, doc) {\n    super.addStep(step, doc)\n    this.updated = this.updated & ~UPDATED_MARKS\n    this.storedMarks = null\n  }\n\n  // :: (number) → Transaction\n  // Update the timestamp for the transaction.\n  setTime(time) {\n    this.time = time\n    return this\n  }\n\n  // :: (Slice) → Transaction\n  // Replace the current selection with the given slice.\n  replaceSelection(slice) {\n    this.selection.replace(this, slice)\n    return this\n  }\n\n  // :: (Node, ?bool) → Transaction\n  // Replace the selection with the given node. When `inheritMarks` is\n  // true and the content is inline, it inherits the marks from the\n  // place where it is inserted.\n  replaceSelectionWith(node, inheritMarks) {\n    let selection = this.selection\n    if (inheritMarks !== false)\n      node = node.mark(this.storedMarks || (selection.empty ? selection.$from.marks() : (selection.$from.marksAcross(selection.$to) || Mark.none)))\n    selection.replaceWith(this, node)\n    return this\n  }\n\n  // :: () → Transaction\n  // Delete the selection.\n  deleteSelection() {\n    this.selection.replace(this)\n    return this\n  }\n\n  // :: (string, from: ?number, to: ?number) → Transaction\n  // Replace the given range, or the selection if no range is given,\n  // with a text node containing the given string.\n  insertText(text, from, to = from) {\n    let schema = this.doc.type.schema\n    if (from == null) {\n      if (!text) return this.deleteSelection()\n      return this.replaceSelectionWith(schema.text(text), true)\n    } else {\n      if (!text) return this.deleteRange(from, to)\n      let marks = this.storedMarks\n      if (!marks) {\n        let $from = this.doc.resolve(from)\n        marks = to == from ? $from.marks() : $from.marksAcross(this.doc.resolve(to))\n      }\n      this.replaceRangeWith(from, to, schema.text(text, marks))\n      if (!this.selection.empty) this.setSelection(Selection.near(this.selection.$to))\n      return this\n    }\n  }\n\n  // :: (union<string, Plugin, PluginKey>, any) → Transaction\n  // Store a metadata property in this transaction, keyed either by\n  // name or by plugin.\n  setMeta(key, value) {\n    this.meta[typeof key == \"string\" ? key : key.key] = value\n    return this\n  }\n\n  // :: (union<string, Plugin, PluginKey>) → any\n  // Retrieve a metadata property for a given name or plugin.\n  getMeta(key) {\n    return this.meta[typeof key == \"string\" ? key : key.key]\n  }\n\n  // :: bool\n  // Returns true if this transaction doesn't contain any metadata,\n  // and can thus safely be extended.\n  get isGeneric() {\n    for (let _ in this.meta) return false\n    return true\n  }\n\n  // :: () → Transaction\n  // Indicate that the editor should scroll the selection into view\n  // when updated to the state produced by this transaction.\n  scrollIntoView() {\n    this.updated |= UPDATED_SCROLL\n    return this\n  }\n\n  get scrolledIntoView() {\n    return (this.updated & UPDATED_SCROLL) > 0\n  }\n}\n","import {Node} from \"prosemirror-model\"\n\nimport {Selection} from \"./selection\"\nimport {Transaction} from \"./transaction\"\n\nfunction bind(f, self) {\n  return !self || !f ? f : f.bind(self)\n}\n\nclass FieldDesc {\n  constructor(name, desc, self) {\n    this.name = name\n    this.init = bind(desc.init, self)\n    this.apply = bind(desc.apply, self)\n  }\n}\n\nconst baseFields = [\n  new FieldDesc(\"doc\", {\n    init(config) { return config.doc || config.schema.topNodeType.createAndFill() },\n    apply(tr) { return tr.doc }\n  }),\n\n  new FieldDesc(\"selection\", {\n    init(config, instance) { return config.selection || Selection.atStart(instance.doc) },\n    apply(tr) { return tr.selection }\n  }),\n\n  new FieldDesc(\"storedMarks\", {\n    init(config) { return config.storedMarks || null },\n    apply(tr, _marks, _old, state) { return state.selection.$cursor ? tr.storedMarks : null }\n  }),\n\n  new FieldDesc(\"scrollToSelection\", {\n    init() { return 0 },\n    apply(tr, prev) { return tr.scrolledIntoView ? prev + 1 : prev }\n  })\n]\n\n// Object wrapping the part of a state object that stays the same\n// across transactions. Stored in the state's `config` property.\nclass Configuration {\n  constructor(schema, plugins) {\n    this.schema = schema\n    this.fields = baseFields.concat()\n    this.plugins = []\n    this.pluginsByKey = Object.create(null)\n    if (plugins) plugins.forEach(plugin => {\n      if (this.pluginsByKey[plugin.key])\n        throw new RangeError(\"Adding different instances of a keyed plugin (\" + plugin.key + \")\")\n      this.plugins.push(plugin)\n      this.pluginsByKey[plugin.key] = plugin\n      if (plugin.spec.state)\n        this.fields.push(new FieldDesc(plugin.key, plugin.spec.state, plugin))\n    })\n  }\n}\n\n// ::- The state of a ProseMirror editor is represented by an object\n// of this type. A state is a persistent data structure—it isn't\n// updated, but rather a new state value is computed from an old one\n// using the [`apply`](#state.EditorState.apply) method.\n//\n// A state holds a number of built-in fields, and plugins can\n// [define](#state.PluginSpec.state) additional fields.\nexport class EditorState {\n  constructor(config) {\n    this.config = config\n  }\n\n  // doc:: Node\n  // The current document.\n\n  // selection:: Selection\n  // The selection.\n\n  // storedMarks:: ?[Mark]\n  // A set of marks to apply to the next input. Will be null when\n  // no explicit marks have been set.\n\n  // :: Schema\n  // The schema of the state's document.\n  get schema() {\n    return this.config.schema\n  }\n\n  // :: [Plugin]\n  // The plugins that are active in this state.\n  get plugins() {\n    return this.config.plugins\n  }\n\n  // :: (Transaction) → EditorState\n  // Apply the given transaction to produce a new state.\n  apply(tr) {\n    return this.applyTransaction(tr).state\n  }\n\n  // : (Transaction) → bool\n  filterTransaction(tr, ignore = -1) {\n    for (let i = 0; i < this.config.plugins.length; i++) if (i != ignore) {\n      let plugin = this.config.plugins[i]\n      if (plugin.spec.filterTransaction && !plugin.spec.filterTransaction.call(plugin, tr, this))\n        return false\n    }\n    return true\n  }\n\n  // :: (Transaction) → {state: EditorState, transactions: [Transaction]}\n  // Verbose variant of [`apply`](#state.EditorState.apply) that\n  // returns the precise transactions that were applied (which might\n  // be influenced by the [transaction\n  // hooks](#state.PluginSpec.filterTransaction) of\n  // plugins) along with the new state.\n  applyTransaction(rootTr) {\n    if (!this.filterTransaction(rootTr)) return {state: this, transactions: []}\n\n    let trs = [rootTr], newState = this.applyInner(rootTr), seen = null\n    // This loop repeatedly gives plugins a chance to respond to\n    // transactions as new transactions are added, making sure to only\n    // pass the transactions the plugin did not see before.\n    outer: for (;;) {\n      let haveNew = false\n      for (let i = 0; i < this.config.plugins.length; i++) {\n        let plugin = this.config.plugins[i]\n        if (plugin.spec.appendTransaction) {\n          let n = seen ? seen[i].n : 0, oldState = seen ? seen[i].state : this\n          let tr = n < trs.length &&\n              plugin.spec.appendTransaction.call(plugin, n ? trs.slice(n) : trs, oldState, newState)\n          if (tr && newState.filterTransaction(tr, i)) {\n            tr.setMeta(\"appendedTransaction\", rootTr)\n            if (!seen) {\n              seen = []\n              for (let j = 0; j < this.config.plugins.length; j++)\n                seen.push(j < i ? {state: newState, n: trs.length} : {state: this, n: 0})\n            }\n            trs.push(tr)\n            newState = newState.applyInner(tr)\n            haveNew = true\n          }\n          if (seen) seen[i] = {state: newState, n: trs.length}\n        }\n      }\n      if (!haveNew) return {state: newState, transactions: trs}\n    }\n  }\n\n  // : (Transaction) → EditorState\n  applyInner(tr) {\n    if (!tr.before.eq(this.doc)) throw new RangeError(\"Applying a mismatched transaction\")\n    let newInstance = new EditorState(this.config), fields = this.config.fields\n    for (let i = 0; i < fields.length; i++) {\n      let field = fields[i]\n      newInstance[field.name] = field.apply(tr, this[field.name], this, newInstance)\n    }\n    for (let i = 0; i < applyListeners.length; i++) applyListeners[i](this, tr, newInstance)\n    return newInstance\n  }\n\n  // :: Transaction\n  // Start a [transaction](#state.Transaction) from this state.\n  get tr() { return new Transaction(this) }\n\n  // :: (Object) → EditorState\n  // Create a new state.\n  //\n  //   config::- Configuration options. Must contain `schema` or `doc` (or both).\n  //\n  //      schema:: ?Schema\n  //      The schema to use.\n  //\n  //      doc:: ?Node\n  //      The starting document.\n  //\n  //      selection:: ?Selection\n  //      A valid selection in the document.\n  //\n  //      storedMarks:: ?[Mark]\n  //      The initial set of [stored marks](#state.EditorState.storedMarks).\n  //\n  //      plugins:: ?[Plugin]\n  //      The plugins that should be active in this state.\n  static create(config) {\n    let $config = new Configuration(config.schema || config.doc.type.schema, config.plugins)\n    let instance = new EditorState($config)\n    for (let i = 0; i < $config.fields.length; i++)\n      instance[$config.fields[i].name] = $config.fields[i].init(config, instance)\n    return instance\n  }\n\n  // :: (Object) → EditorState\n  // Create a new state based on this one, but with an adjusted set of\n  // active plugins. State fields that exist in both sets of plugins\n  // are kept unchanged. Those that no longer exist are dropped, and\n  // those that are new are initialized using their\n  // [`init`](#state.StateField.init) method, passing in the new\n  // configuration object..\n  //\n  //   config::- configuration options\n  //\n  //     schema:: ?Schema\n  //     New schema to use.\n  //\n  //     plugins:: ?[Plugin]\n  //     New set of active plugins.\n  reconfigure(config) {\n    let $config = new Configuration(config.schema || this.schema, config.plugins)\n    let fields = $config.fields, instance = new EditorState($config)\n    for (let i = 0; i < fields.length; i++) {\n      let name = fields[i].name\n      instance[name] = this.hasOwnProperty(name) ? this[name] : fields[i].init(config, instance)\n    }\n    return instance\n  }\n\n  // :: (?union<Object<Plugin>, string, number>) → Object\n  // Serialize this state to JSON. If you want to serialize the state\n  // of plugins, pass an object mapping property names to use in the\n  // resulting JSON object to plugin objects. The argument may also be\n  // a string or number, in which case it is ignored, to support the\n  // way `JSON.stringify` calls `toString` methods.\n  toJSON(pluginFields) {\n    let result = {doc: this.doc.toJSON(), selection: this.selection.toJSON()}\n    if (this.storedMarks) result.storedMarks = this.storedMarks.map(m => m.toJSON())\n    if (pluginFields && typeof pluginFields == 'object') for (let prop in pluginFields) {\n      if (prop == \"doc\" || prop == \"selection\")\n        throw new RangeError(\"The JSON fields `doc` and `selection` are reserved\")\n      let plugin = pluginFields[prop], state = plugin.spec.state\n      if (state && state.toJSON) result[prop] = state.toJSON.call(plugin, this[plugin.key])\n    }\n    return result\n  }\n\n  // :: (Object, Object, ?Object<Plugin>) → EditorState\n  // Deserialize a JSON representation of a state. `config` should\n  // have at least a `schema` field, and should contain array of\n  // plugins to initialize the state with. `pluginFields` can be used\n  // to deserialize the state of plugins, by associating plugin\n  // instances with the property names they use in the JSON object.\n  //\n  //   config::- configuration options\n  //\n  //     schema:: Schema\n  //     The schema to use.\n  //\n  //     plugins:: ?[Plugin]\n  //     The set of active plugins.\n  static fromJSON(config, json, pluginFields) {\n    if (!json) throw new RangeError(\"Invalid input for EditorState.fromJSON\")\n    if (!config.schema) throw new RangeError(\"Required config field 'schema' missing\")\n    let $config = new Configuration(config.schema, config.plugins)\n    let instance = new EditorState($config)\n    $config.fields.forEach(field => {\n      if (field.name == \"doc\") {\n        instance.doc = Node.fromJSON(config.schema, json.doc)\n      } else if (field.name == \"selection\") {\n        instance.selection = Selection.fromJSON(instance.doc, json.selection)\n      } else if (field.name == \"storedMarks\") {\n        if (json.storedMarks) instance.storedMarks = json.storedMarks.map(config.schema.markFromJSON)\n      } else {\n        if (pluginFields) for (let prop in pluginFields) {\n          let plugin = pluginFields[prop], state = plugin.spec.state\n          if (plugin.key == field.name && state && state.fromJSON &&\n              Object.prototype.hasOwnProperty.call(json, prop)) {\n            // This field belongs to a plugin mapped to a JSON field, read it from there.\n            instance[field.name] = state.fromJSON.call(plugin, config, json[prop], instance)\n            return\n          }\n        }\n        instance[field.name] = field.init(config, instance)\n      }\n    })\n    return instance\n  }\n\n  // Kludge to allow the view to track mappings between different\n  // instances of a state.\n  //\n  // FIXME this is no longer needed as of prosemirror-view 1.9.0,\n  // though due to backwards-compat we should probably keep it around\n  // for a while (if only as a no-op)\n  static addApplyListener(f) {\n    applyListeners.push(f)\n  }\n  static removeApplyListener(f) {\n    let found = applyListeners.indexOf(f)\n    if (found > -1) applyListeners.splice(found, 1)\n  }\n}\n\nconst applyListeners = []\n","// PluginSpec:: interface\n//\n// This is the type passed to the [`Plugin`](#state.Plugin)\n// constructor. It provides a definition for a plugin.\n//\n//   props:: ?EditorProps\n//   The [view props](#view.EditorProps) added by this plugin. Props\n//   that are functions will be bound to have the plugin instance as\n//   their `this` binding.\n//\n//   state:: ?StateField<any>\n//   Allows a plugin to define a [state field](#state.StateField), an\n//   extra slot in the state object in which it can keep its own data.\n//\n//   key:: ?PluginKey\n//   Can be used to make this a keyed plugin. You can have only one\n//   plugin with a given key in a given state, but it is possible to\n//   access the plugin's configuration and state through the key,\n//   without having access to the plugin instance object.\n//\n//   view:: ?(EditorView) → Object\n//   When the plugin needs to interact with the editor view, or\n//   set something up in the DOM, use this field. The function\n//   will be called when the plugin's state is associated with an\n//   editor view.\n//\n//     return::-\n//     Should return an object with the following optional\n//     properties:\n//\n//       update:: ?(view: EditorView, prevState: EditorState)\n//       Called whenever the view's state is updated.\n//\n//       destroy:: ?()\n//       Called when the view is destroyed or receives a state\n//       with different plugins.\n//\n//   filterTransaction:: ?(Transaction, EditorState) → bool\n//   When present, this will be called before a transaction is\n//   applied by the state, allowing the plugin to cancel it (by\n//   returning false).\n//\n//   appendTransaction:: ?(transactions: [Transaction], oldState: EditorState, newState: EditorState) → ?Transaction\n//   Allows the plugin to append another transaction to be applied\n//   after the given array of transactions. When another plugin\n//   appends a transaction after this was called, it is called again\n//   with the new state and new transactions—but only the new\n//   transactions, i.e. it won't be passed transactions that it\n//   already saw.\n\nfunction bindProps(obj, self, target) {\n  for (let prop in obj) {\n    let val = obj[prop]\n    if (val instanceof Function) val = val.bind(self)\n    else if (prop == \"handleDOMEvents\") val = bindProps(val, self, {})\n    target[prop] = val\n  }\n  return target\n}\n\n// ::- Plugins bundle functionality that can be added to an editor.\n// They are part of the [editor state](#state.EditorState) and\n// may influence that state and the view that contains it.\nexport class Plugin {\n  // :: (PluginSpec)\n  // Create a plugin.\n  constructor(spec) {\n    // :: EditorProps\n    // The [props](#view.EditorProps) exported by this plugin.\n    this.props = {}\n    if (spec.props) bindProps(spec.props, this, this.props)\n    // :: Object\n    // The plugin's [spec object](#state.PluginSpec).\n    this.spec = spec\n    this.key = spec.key ? spec.key.key : createKey(\"plugin\")\n  }\n\n  // :: (EditorState) → any\n  // Extract the plugin's state field from an editor state.\n  getState(state) { return state[this.key] }\n}\n\n// StateField:: interface<T>\n// A plugin spec may provide a state field (under its\n// [`state`](#state.PluginSpec.state) property) of this type, which\n// describes the state it wants to keep. Functions provided here are\n// always called with the plugin instance as their `this` binding.\n//\n//   init:: (config: Object, instance: EditorState) → T\n//   Initialize the value of the field. `config` will be the object\n//   passed to [`EditorState.create`](#state.EditorState^create). Note\n//   that `instance` is a half-initialized state instance, and will\n//   not have values for plugin fields initialized after this one.\n//\n//   apply:: (tr: Transaction, value: T, oldState: EditorState, newState: EditorState) → T\n//   Apply the given transaction to this state field, producing a new\n//   field value. Note that the `newState` argument is again a partially\n//   constructed state does not yet contain the state from plugins\n//   coming after this one.\n//\n//   toJSON:: ?(value: T) → *\n//   Convert this field to JSON. Optional, can be left off to disable\n//   JSON serialization for the field.\n//\n//   fromJSON:: ?(config: Object, value: *, state: EditorState) → T\n//   Deserialize the JSON representation of this field. Note that the\n//   `state` argument is again a half-initialized state.\n\nconst keys = Object.create(null)\n\nfunction createKey(name) {\n  if (name in keys) return name + \"$\" + ++keys[name]\n  keys[name] = 0\n  return name + \"$\"\n}\n\n// ::- A key is used to [tag](#state.PluginSpec.key)\n// plugins in a way that makes it possible to find them, given an\n// editor state. Assigning a key does mean only one plugin of that\n// type can be active in a state.\nexport class PluginKey {\n  // :: (?string)\n  // Create a plugin key.\n  constructor(name = \"key\") { this.key = createKey(name) }\n\n  // :: (EditorState) → ?Plugin\n  // Get the active plugin with this key, if any, from an editor\n  // state.\n  get(state) { return state.config.pluginsByKey[this.key] }\n\n  // :: (EditorState) → ?any\n  // Get the plugin's state from an editor state.\n  getState(state) { return state[this.key] }\n}\n","// ::- Persistent data structure representing an ordered mapping from\n// strings to values, with some convenient update methods.\nfunction OrderedMap(content) {\n  this.content = content;\n}\n\nOrderedMap.prototype = {\n  constructor: OrderedMap,\n\n  find: function(key) {\n    for (var i = 0; i < this.content.length; i += 2)\n      if (this.content[i] === key) return i\n    return -1\n  },\n\n  // :: (string) → ?any\n  // Retrieve the value stored under `key`, or return undefined when\n  // no such key exists.\n  get: function(key) {\n    var found = this.find(key);\n    return found == -1 ? undefined : this.content[found + 1]\n  },\n\n  // :: (string, any, ?string) → OrderedMap\n  // Create a new map by replacing the value of `key` with a new\n  // value, or adding a binding to the end of the map. If `newKey` is\n  // given, the key of the binding will be replaced with that key.\n  update: function(key, value, newKey) {\n    var self = newKey && newKey != key ? this.remove(newKey) : this;\n    var found = self.find(key), content = self.content.slice();\n    if (found == -1) {\n      content.push(newKey || key, value);\n    } else {\n      content[found + 1] = value;\n      if (newKey) content[found] = newKey;\n    }\n    return new OrderedMap(content)\n  },\n\n  // :: (string) → OrderedMap\n  // Return a map with the given key removed, if it existed.\n  remove: function(key) {\n    var found = this.find(key);\n    if (found == -1) return this\n    var content = this.content.slice();\n    content.splice(found, 2);\n    return new OrderedMap(content)\n  },\n\n  // :: (string, any) → OrderedMap\n  // Add a new key to the start of the map.\n  addToStart: function(key, value) {\n    return new OrderedMap([key, value].concat(this.remove(key).content))\n  },\n\n  // :: (string, any) → OrderedMap\n  // Add a new key to the end of the map.\n  addToEnd: function(key, value) {\n    var content = this.remove(key).content.slice();\n    content.push(key, value);\n    return new OrderedMap(content)\n  },\n\n  // :: (string, string, any) → OrderedMap\n  // Add a key after the given key. If `place` is not found, the new\n  // key is added to the end.\n  addBefore: function(place, key, value) {\n    var without = this.remove(key), content = without.content.slice();\n    var found = without.find(place);\n    content.splice(found == -1 ? content.length : found, 0, key, value);\n    return new OrderedMap(content)\n  },\n\n  // :: ((key: string, value: any))\n  // Call the given function for each key/value pair in the map, in\n  // order.\n  forEach: function(f) {\n    for (var i = 0; i < this.content.length; i += 2)\n      f(this.content[i], this.content[i + 1]);\n  },\n\n  // :: (union<Object, OrderedMap>) → OrderedMap\n  // Create a new map by prepending the keys in this map that don't\n  // appear in `map` before the keys in `map`.\n  prepend: function(map) {\n    map = OrderedMap.from(map);\n    if (!map.size) return this\n    return new OrderedMap(map.content.concat(this.subtract(map).content))\n  },\n\n  // :: (union<Object, OrderedMap>) → OrderedMap\n  // Create a new map by appending the keys in this map that don't\n  // appear in `map` after the keys in `map`.\n  append: function(map) {\n    map = OrderedMap.from(map);\n    if (!map.size) return this\n    return new OrderedMap(this.subtract(map).content.concat(map.content))\n  },\n\n  // :: (union<Object, OrderedMap>) → OrderedMap\n  // Create a map containing all the keys in this map that don't\n  // appear in `map`.\n  subtract: function(map) {\n    var result = this;\n    map = OrderedMap.from(map);\n    for (var i = 0; i < map.content.length; i += 2)\n      result = result.remove(map.content[i]);\n    return result\n  },\n\n  // :: number\n  // The amount of keys in this map.\n  get size() {\n    return this.content.length >> 1\n  }\n};\n\n// :: (?union<Object, OrderedMap>) → OrderedMap\n// Return a map with the given content. If null, create an empty\n// map. If given an ordered map, return that map itself. If given an\n// object, create a map from the object's properties.\nOrderedMap.from = function(value) {\n  if (value instanceof OrderedMap) return value\n  var content = [];\n  if (value) for (var prop in value) content.push(prop, value[prop]);\n  return new OrderedMap(content)\n};\n\nvar orderedmap = OrderedMap;\n\nexport default orderedmap;\n","import {findDiffStart, findDiffEnd} from \"./diff\"\n\n// ::- A fragment represents a node's collection of child nodes.\n//\n// Like nodes, fragments are persistent data structures, and you\n// should not mutate them or their content. Rather, you create new\n// instances whenever needed. The API tries to make this easy.\nexport class Fragment {\n  constructor(content, size) {\n    this.content = content\n    // :: number\n    // The size of the fragment, which is the total of the size of its\n    // content nodes.\n    this.size = size || 0\n    if (size == null) for (let i = 0; i < content.length; i++)\n      this.size += content[i].nodeSize\n  }\n\n  // :: (number, number, (node: Node, start: number, parent: Node, index: number) → ?bool, ?number)\n  // Invoke a callback for all descendant nodes between the given two\n  // positions (relative to start of this fragment). Doesn't descend\n  // into a node when the callback returns `false`.\n  nodesBetween(from, to, f, nodeStart = 0, parent) {\n    for (let i = 0, pos = 0; pos < to; i++) {\n      let child = this.content[i], end = pos + child.nodeSize\n      if (end > from && f(child, nodeStart + pos, parent, i) !== false && child.content.size) {\n        let start = pos + 1\n        child.nodesBetween(Math.max(0, from - start),\n                           Math.min(child.content.size, to - start),\n                           f, nodeStart + start)\n      }\n      pos = end\n    }\n  }\n\n  // :: ((node: Node, pos: number, parent: Node) → ?bool)\n  // Call the given callback for every descendant node. The callback\n  // may return `false` to prevent traversal of a given node's children.\n  descendants(f) {\n    this.nodesBetween(0, this.size, f)\n  }\n\n  // : (number, number, ?string, ?string) → string\n  textBetween(from, to, blockSeparator, leafText) {\n    let text = \"\", separated = true\n    this.nodesBetween(from, to, (node, pos) => {\n      if (node.isText) {\n        text += node.text.slice(Math.max(from, pos) - pos, to - pos)\n        separated = !blockSeparator\n      } else if (node.isLeaf && leafText) {\n        text += leafText\n        separated = !blockSeparator\n      } else if (!separated && node.isBlock) {\n        text += blockSeparator\n        separated = true\n      }\n    }, 0)\n    return text\n  }\n\n  // :: (Fragment) → Fragment\n  // Create a new fragment containing the combined content of this\n  // fragment and the other.\n  append(other) {\n    if (!other.size) return this\n    if (!this.size) return other\n    let last = this.lastChild, first = other.firstChild, content = this.content.slice(), i = 0\n    if (last.isText && last.sameMarkup(first)) {\n      content[content.length - 1] = last.withText(last.text + first.text)\n      i = 1\n    }\n    for (; i < other.content.length; i++) content.push(other.content[i])\n    return new Fragment(content, this.size + other.size)\n  }\n\n  // :: (number, ?number) → Fragment\n  // Cut out the sub-fragment between the two given positions.\n  cut(from, to) {\n    if (to == null) to = this.size\n    if (from == 0 && to == this.size) return this\n    let result = [], size = 0\n    if (to > from) for (let i = 0, pos = 0; pos < to; i++) {\n      let child = this.content[i], end = pos + child.nodeSize\n      if (end > from) {\n        if (pos < from || end > to) {\n          if (child.isText)\n            child = child.cut(Math.max(0, from - pos), Math.min(child.text.length, to - pos))\n          else\n            child = child.cut(Math.max(0, from - pos - 1), Math.min(child.content.size, to - pos - 1))\n        }\n        result.push(child)\n        size += child.nodeSize\n      }\n      pos = end\n    }\n    return new Fragment(result, size)\n  }\n\n  cutByIndex(from, to) {\n    if (from == to) return Fragment.empty\n    if (from == 0 && to == this.content.length) return this\n    return new Fragment(this.content.slice(from, to))\n  }\n\n  // :: (number, Node) → Fragment\n  // Create a new fragment in which the node at the given index is\n  // replaced by the given node.\n  replaceChild(index, node) {\n    let current = this.content[index]\n    if (current == node) return this\n    let copy = this.content.slice()\n    let size = this.size + node.nodeSize - current.nodeSize\n    copy[index] = node\n    return new Fragment(copy, size)\n  }\n\n  // : (Node) → Fragment\n  // Create a new fragment by prepending the given node to this\n  // fragment.\n  addToStart(node) {\n    return new Fragment([node].concat(this.content), this.size + node.nodeSize)\n  }\n\n  // : (Node) → Fragment\n  // Create a new fragment by appending the given node to this\n  // fragment.\n  addToEnd(node) {\n    return new Fragment(this.content.concat(node), this.size + node.nodeSize)\n  }\n\n  // :: (Fragment) → bool\n  // Compare this fragment to another one.\n  eq(other) {\n    if (this.content.length != other.content.length) return false\n    for (let i = 0; i < this.content.length; i++)\n      if (!this.content[i].eq(other.content[i])) return false\n    return true\n  }\n\n  // :: ?Node\n  // The first child of the fragment, or `null` if it is empty.\n  get firstChild() { return this.content.length ? this.content[0] : null }\n\n  // :: ?Node\n  // The last child of the fragment, or `null` if it is empty.\n  get lastChild() { return this.content.length ? this.content[this.content.length - 1] : null }\n\n  // :: number\n  // The number of child nodes in this fragment.\n  get childCount() { return this.content.length }\n\n  // :: (number) → Node\n  // Get the child node at the given index. Raise an error when the\n  // index is out of range.\n  child(index) {\n    let found = this.content[index]\n    if (!found) throw new RangeError(\"Index \" + index + \" out of range for \" + this)\n    return found\n  }\n\n  // :: (number) → ?Node\n  // Get the child node at the given index, if it exists.\n  maybeChild(index) {\n    return this.content[index]\n  }\n\n  // :: ((node: Node, offset: number, index: number))\n  // Call `f` for every child node, passing the node, its offset\n  // into this parent node, and its index.\n  forEach(f) {\n    for (let i = 0, p = 0; i < this.content.length; i++) {\n      let child = this.content[i]\n      f(child, p, i)\n      p += child.nodeSize\n    }\n  }\n\n  // :: (Fragment) → ?number\n  // Find the first position at which this fragment and another\n  // fragment differ, or `null` if they are the same.\n  findDiffStart(other, pos = 0) {\n    return findDiffStart(this, other, pos)\n  }\n\n  // :: (Fragment) → ?{a: number, b: number}\n  // Find the first position, searching from the end, at which this\n  // fragment and the given fragment differ, or `null` if they are the\n  // same. Since this position will not be the same in both nodes, an\n  // object with two separate positions is returned.\n  findDiffEnd(other, pos = this.size, otherPos = other.size) {\n    return findDiffEnd(this, other, pos, otherPos)\n  }\n\n  // : (number, ?number) → {index: number, offset: number}\n  // Find the index and inner offset corresponding to a given relative\n  // position in this fragment. The result object will be reused\n  // (overwritten) the next time the function is called. (Not public.)\n  findIndex(pos, round = -1) {\n    if (pos == 0) return retIndex(0, pos)\n    if (pos == this.size) return retIndex(this.content.length, pos)\n    if (pos > this.size || pos < 0) throw new RangeError(`Position ${pos} outside of fragment (${this})`)\n    for (let i = 0, curPos = 0;; i++) {\n      let cur = this.child(i), end = curPos + cur.nodeSize\n      if (end >= pos) {\n        if (end == pos || round > 0) return retIndex(i + 1, end)\n        return retIndex(i, curPos)\n      }\n      curPos = end\n    }\n  }\n\n  // :: () → string\n  // Return a debugging string that describes this fragment.\n  toString() { return \"<\" + this.toStringInner() + \">\" }\n\n  toStringInner() { return this.content.join(\", \") }\n\n  // :: () → ?Object\n  // Create a JSON-serializeable representation of this fragment.\n  toJSON() {\n    return this.content.length ? this.content.map(n => n.toJSON()) : null\n  }\n\n  // :: (Schema, ?Object) → Fragment\n  // Deserialize a fragment from its JSON representation.\n  static fromJSON(schema, value) {\n    if (!value) return Fragment.empty\n    if (!Array.isArray(value)) throw new RangeError(\"Invalid input for Fragment.fromJSON\")\n    return new Fragment(value.map(schema.nodeFromJSON))\n  }\n\n  // :: ([Node]) → Fragment\n  // Build a fragment from an array of nodes. Ensures that adjacent\n  // text nodes with the same marks are joined together.\n  static fromArray(array) {\n    if (!array.length) return Fragment.empty\n    let joined, size = 0\n    for (let i = 0; i < array.length; i++) {\n      let node = array[i]\n      size += node.nodeSize\n      if (i && node.isText && array[i - 1].sameMarkup(node)) {\n        if (!joined) joined = array.slice(0, i)\n        joined[joined.length - 1] = node.withText(joined[joined.length - 1].text + node.text)\n      } else if (joined) {\n        joined.push(node)\n      }\n    }\n    return new Fragment(joined || array, size)\n  }\n\n  // :: (?union<Fragment, Node, [Node]>) → Fragment\n  // Create a fragment from something that can be interpreted as a set\n  // of nodes. For `null`, it returns the empty fragment. For a\n  // fragment, the fragment itself. For a node or array of nodes, a\n  // fragment containing those nodes.\n  static from(nodes) {\n    if (!nodes) return Fragment.empty\n    if (nodes instanceof Fragment) return nodes\n    if (Array.isArray(nodes)) return this.fromArray(nodes)\n    if (nodes.attrs) return new Fragment([nodes], nodes.nodeSize)\n    throw new RangeError(\"Can not convert \" + nodes + \" to a Fragment\" +\n                         (nodes.nodesBetween ? \" (looks like multiple versions of prosemirror-model were loaded)\" : \"\"))\n  }\n}\n\nconst found = {index: 0, offset: 0}\nfunction retIndex(index, offset) {\n  found.index = index\n  found.offset = offset\n  return found\n}\n\n// :: Fragment\n// An empty fragment. Intended to be reused whenever a node doesn't\n// contain anything (rather than allocating a new empty fragment for\n// each leaf node).\nFragment.empty = new Fragment([], 0)\n","export function findDiffStart(a, b, pos) {\n  for (let i = 0;; i++) {\n    if (i == a.childCount || i == b.childCount)\n      return a.childCount == b.childCount ? null : pos\n\n    let childA = a.child(i), childB = b.child(i)\n    if (childA == childB) { pos += childA.nodeSize; continue }\n\n    if (!childA.sameMarkup(childB)) return pos\n\n    if (childA.isText && childA.text != childB.text) {\n      for (let j = 0; childA.text[j] == childB.text[j]; j++)\n        pos++\n      return pos\n    }\n    if (childA.content.size || childB.content.size) {\n      let inner = findDiffStart(childA.content, childB.content, pos + 1)\n      if (inner != null) return inner\n    }\n    pos += childA.nodeSize\n  }\n}\n\nexport function findDiffEnd(a, b, posA, posB) {\n  for (let iA = a.childCount, iB = b.childCount;;) {\n    if (iA == 0 || iB == 0)\n      return iA == iB ? null : {a: posA, b: posB}\n\n    let childA = a.child(--iA), childB = b.child(--iB), size = childA.nodeSize\n    if (childA == childB) {\n      posA -= size; posB -= size\n      continue\n    }\n\n    if (!childA.sameMarkup(childB)) return {a: posA, b: posB}\n\n    if (childA.isText && childA.text != childB.text) {\n      let same = 0, minSize = Math.min(childA.text.length, childB.text.length)\n      while (same < minSize && childA.text[childA.text.length - same - 1] == childB.text[childB.text.length - same - 1]) {\n        same++; posA--; posB--\n      }\n      return {a: posA, b: posB}\n    }\n    if (childA.content.size || childB.content.size) {\n      let inner = findDiffEnd(childA.content, childB.content, posA - 1, posB - 1)\n      if (inner) return inner\n    }\n    posA -= size; posB -= size\n  }\n}\n","export function compareDeep(a, b) {\n  if (a === b) return true\n  if (!(a && typeof a == \"object\") ||\n      !(b && typeof b == \"object\")) return false\n  let array = Array.isArray(a)\n  if (Array.isArray(b) != array) return false\n  if (array) {\n    if (a.length != b.length) return false\n    for (let i = 0; i < a.length; i++) if (!compareDeep(a[i], b[i])) return false\n  } else {\n    for (let p in a) if (!(p in b) || !compareDeep(a[p], b[p])) return false\n    for (let p in b) if (!(p in a)) return false\n  }\n  return true\n}\n","import {MarkType, Slice, Fragment} from \"prosemirror-model\"\n\nimport {Transform} from \"./transform\"\nimport {AddMarkStep, RemoveMarkStep} from \"./mark_step\"\nimport {ReplaceStep} from \"./replace_step\"\n\n// :: (number, number, Mark) → this\n// Add the given mark to the inline content between `from` and `to`.\nTransform.prototype.addMark = function(from, to, mark) {\n  let removed = [], added = [], removing = null, adding = null\n  this.doc.nodesBetween(from, to, (node, pos, parent) => {\n    if (!node.isInline) return\n    let marks = node.marks\n    if (!mark.isInSet(marks) && parent.type.allowsMarkType(mark.type)) {\n      let start = Math.max(pos, from), end = Math.min(pos + node.nodeSize, to)\n      let newSet = mark.addToSet(marks)\n\n      for (let i = 0; i < marks.length; i++) {\n        if (!marks[i].isInSet(newSet)) {\n          if (removing && removing.to == start && removing.mark.eq(marks[i]))\n            removing.to = end\n          else\n            removed.push(removing = new RemoveMarkStep(start, end, marks[i]))\n        }\n      }\n\n      if (adding && adding.to == start)\n        adding.to = end\n      else\n        added.push(adding = new AddMarkStep(start, end, mark))\n    }\n  })\n\n  removed.forEach(s => this.step(s))\n  added.forEach(s => this.step(s))\n  return this\n}\n\n// :: (number, number, ?union<Mark, MarkType>) → this\n// Remove marks from inline nodes between `from` and `to`. When `mark`\n// is a single mark, remove precisely that mark. When it is a mark type,\n// remove all marks of that type. When it is null, remove all marks of\n// any type.\nTransform.prototype.removeMark = function(from, to, mark = null) {\n  let matched = [], step = 0\n  this.doc.nodesBetween(from, to, (node, pos) => {\n    if (!node.isInline) return\n    step++\n    let toRemove = null\n    if (mark instanceof MarkType) {\n      let found = mark.isInSet(node.marks)\n      if (found) toRemove = [found]\n    } else if (mark) {\n      if (mark.isInSet(node.marks)) toRemove = [mark]\n    } else {\n      toRemove = node.marks\n    }\n    if (toRemove && toRemove.length) {\n      let end = Math.min(pos + node.nodeSize, to)\n      for (let i = 0; i < toRemove.length; i++) {\n        let style = toRemove[i], found\n        for (let j = 0; j < matched.length; j++) {\n          let m = matched[j]\n          if (m.step == step - 1 && style.eq(matched[j].style)) found = m\n        }\n        if (found) {\n          found.to = end\n          found.step = step\n        } else {\n          matched.push({style, from: Math.max(pos, from), to: end, step})\n        }\n      }\n    }\n  })\n  matched.forEach(m => this.step(new RemoveMarkStep(m.from, m.to, m.style)))\n  return this\n}\n\n// :: (number, NodeType, ?ContentMatch) → this\n// Removes all marks and nodes from the content of the node at `pos`\n// that don't match the given new parent node type. Accepts an\n// optional starting [content match](#model.ContentMatch) as third\n// argument.\nTransform.prototype.clearIncompatible = function(pos, parentType, match = parentType.contentMatch) {\n  let node = this.doc.nodeAt(pos)\n  let delSteps = [], cur = pos + 1\n  for (let i = 0; i < node.childCount; i++) {\n    let child = node.child(i), end = cur + child.nodeSize\n    let allowed = match.matchType(child.type, child.attrs)\n    if (!allowed) {\n      delSteps.push(new ReplaceStep(cur, end, Slice.empty))\n    } else {\n      match = allowed\n      for (let j = 0; j < child.marks.length; j++) if (!parentType.allowsMarkType(child.marks[j].type))\n        this.step(new RemoveMarkStep(cur, end, child.marks[j]))\n    }\n    cur = end\n  }\n  if (!match.validEnd) {\n    let fill = match.fillBefore(Fragment.empty, true)\n    this.replace(cur, cur, new Slice(fill, 0, 0))\n  }\n  for (let i = delSteps.length - 1; i >= 0; i--) this.step(delSteps[i])\n  return this\n}\n","import {Fragment, Slice} from \"prosemirror-model\"\n\nimport {ReplaceStep, ReplaceAroundStep} from \"./replace_step\"\nimport {Transform} from \"./transform\"\nimport {insertPoint} from \"./structure\"\n\n// :: (Node, number, ?number, ?Slice) → ?Step\n// ‘Fit’ a slice into a given position in the document, producing a\n// [step](#transform.Step) that inserts it. Will return null if\n// there's no meaningful way to insert the slice here, or inserting it\n// would be a no-op (an empty slice over an empty range).\nexport function replaceStep(doc, from, to = from, slice = Slice.empty) {\n  if (from == to && !slice.size) return null\n\n  let $from = doc.resolve(from), $to = doc.resolve(to)\n  // Optimization -- avoid work if it's obvious that it's not needed.\n  if (fitsTrivially($from, $to, slice)) return new ReplaceStep(from, to, slice)\n  return new Fitter($from, $to, slice).fit()\n}\n\n// :: (number, ?number, ?Slice) → this\n// Replace the part of the document between `from` and `to` with the\n// given `slice`.\nTransform.prototype.replace = function(from, to = from, slice = Slice.empty) {\n  let step = replaceStep(this.doc, from, to, slice)\n  if (step) this.step(step)\n  return this\n}\n\n// :: (number, number, union<Fragment, Node, [Node]>) → this\n// Replace the given range with the given content, which may be a\n// fragment, node, or array of nodes.\nTransform.prototype.replaceWith = function(from, to, content) {\n  return this.replace(from, to, new Slice(Fragment.from(content), 0, 0))\n}\n\n// :: (number, number) → this\n// Delete the content between the given positions.\nTransform.prototype.delete = function(from, to) {\n  return this.replace(from, to, Slice.empty)\n}\n\n// :: (number, union<Fragment, Node, [Node]>) → this\n// Insert the given content at the given position.\nTransform.prototype.insert = function(pos, content) {\n  return this.replaceWith(pos, pos, content)\n}\n\nfunction fitsTrivially($from, $to, slice) {\n  return !slice.openStart && !slice.openEnd && $from.start() == $to.start() &&\n    $from.parent.canReplace($from.index(), $to.index(), slice.content)\n}\n\n// Algorithm for 'placing' the elements of a slice into a gap:\n//\n// We consider the content of each node that is open to the left to be\n// independently placeable. I.e. in <p(\"foo\"), p(\"bar\")>, when the\n// paragraph on the left is open, \"foo\" can be placed (somewhere on\n// the left side of the replacement gap) independently from p(\"bar\").\n//\n// This class tracks the state of the placement progress in the\n// following properties:\n//\n//  - `frontier` holds a stack of `{type, match}` objects that\n//    represent the open side of the replacement. It starts at\n//    `$from`, then moves forward as content is placed, and is finally\n//    reconciled with `$to`.\n//\n//  - `unplaced` is a slice that represents the content that hasn't\n//    been placed yet.\n//\n//  - `placed` is a fragment of placed content. Its open-start value\n//    is implicit in `$from`, and its open-end value in `frontier`.\nclass Fitter {\n  constructor($from, $to, slice) {\n    this.$to = $to\n    this.$from = $from\n    this.unplaced = slice\n\n    this.frontier = []\n    for (let i = 0; i <= $from.depth; i++) {\n      let node = $from.node(i)\n      this.frontier.push({\n        type: node.type,\n        match: node.contentMatchAt($from.indexAfter(i))\n      })\n    }\n\n    this.placed = Fragment.empty\n    for (let i = $from.depth; i > 0; i--)\n      this.placed = Fragment.from($from.node(i).copy(this.placed))\n  }\n\n  get depth() { return this.frontier.length - 1 }\n\n  fit() {\n    // As long as there's unplaced content, try to place some of it.\n    // If that fails, either increase the open score of the unplaced\n    // slice, or drop nodes from it, and then try again.\n    while (this.unplaced.size) {\n      let fit = this.findFittable()\n      if (fit) this.placeNodes(fit)\n      else this.openMore() || this.dropNode()\n    }\n    // When there's inline content directly after the frontier _and_\n    // directly after `this.$to`, we must generate a `ReplaceAround`\n    // step that pulls that content into the node after the frontier.\n    // That means the fitting must be done to the end of the textblock\n    // node after `this.$to`, not `this.$to` itself.\n    let moveInline = this.mustMoveInline(), placedSize = this.placed.size - this.depth - this.$from.depth\n    let $from = this.$from, $to = this.close(moveInline < 0 ? this.$to : $from.doc.resolve(moveInline))\n    if (!$to) return null\n\n    // If closing to `$to` succeeded, create a step\n    let content = this.placed, openStart = $from.depth, openEnd = $to.depth\n    while (openStart && openEnd && content.childCount == 1) { // Normalize by dropping open parent nodes\n      content = content.firstChild.content\n      openStart--; openEnd--\n    }\n    let slice = new Slice(content, openStart, openEnd)\n    if (moveInline > -1)\n      return new ReplaceAroundStep($from.pos, moveInline, this.$to.pos, this.$to.end(), slice, placedSize)\n    if (slice.size || $from.pos != this.$to.pos) // Don't generate no-op steps\n      return new ReplaceStep($from.pos, $to.pos, slice)\n  }\n\n  // Find a position on the start spine of `this.unplaced` that has\n  // content that can be moved somewhere on the frontier. Returns two\n  // depths, one for the slice and one for the frontier.\n  findFittable() {\n    // Only try wrapping nodes (pass 2) after finding a place without\n    // wrapping failed.\n    for (let pass = 1; pass <= 2; pass++) {\n      for (let sliceDepth = this.unplaced.openStart; sliceDepth >= 0; sliceDepth--) {\n        let fragment, parent\n        if (sliceDepth) {\n          parent = contentAt(this.unplaced.content, sliceDepth - 1).firstChild\n          fragment = parent.content\n        } else {\n          fragment = this.unplaced.content\n        }\n        let first = fragment.firstChild\n        for (let frontierDepth = this.depth; frontierDepth >= 0; frontierDepth--) {\n          let {type, match} = this.frontier[frontierDepth], wrap, inject\n          // In pass 1, if the next node matches, or there is no next\n          // node but the parents look compatible, we've found a\n          // place.\n          if (pass == 1 && (first ? match.matchType(first.type) || (inject = match.fillBefore(Fragment.from(first), false))\n                            : type.compatibleContent(parent.type)))\n            return {sliceDepth, frontierDepth, parent, inject}\n          // In pass 2, look for a set of wrapping nodes that make\n          // `first` fit here.\n          else if (pass == 2 && first && (wrap = match.findWrapping(first.type)))\n            return {sliceDepth, frontierDepth, parent, wrap}\n          // Don't continue looking further up if the parent node\n          // would fit here.\n          if (parent && match.matchType(parent.type)) break\n        }\n      }\n    }\n  }\n\n  openMore() {\n    let {content, openStart, openEnd} = this.unplaced\n    let inner = contentAt(content, openStart)\n    if (!inner.childCount || inner.firstChild.isLeaf) return false\n    this.unplaced = new Slice(content, openStart + 1,\n                              Math.max(openEnd, inner.size + openStart >= content.size - openEnd ? openStart + 1 : 0))\n    return true\n  }\n\n  dropNode() {\n    let {content, openStart, openEnd} = this.unplaced\n    let inner = contentAt(content, openStart)\n    if (inner.childCount <= 1 && openStart > 0) {\n      let openAtEnd = content.size - openStart <= openStart + inner.size\n      this.unplaced = new Slice(dropFromFragment(content, openStart - 1, 1), openStart - 1,\n                                openAtEnd ? openStart - 1 : openEnd)\n    } else {\n      this.unplaced = new Slice(dropFromFragment(content, openStart, 1), openStart, openEnd)\n    }\n  }\n\n  // : ({sliceDepth: number, frontierDepth: number, parent: ?Node, wrap: ?[NodeType], inject: ?Fragment})\n  // Move content from the unplaced slice at `sliceDepth` to the\n  // frontier node at `frontierDepth`. Close that frontier node when\n  // applicable.\n  placeNodes({sliceDepth, frontierDepth, parent, inject, wrap}) {\n    while (this.depth > frontierDepth) this.closeFrontierNode()\n    if (wrap) for (let i = 0; i < wrap.length; i++) this.openFrontierNode(wrap[i])\n\n    let slice = this.unplaced, fragment = parent ? parent.content : slice.content\n    let openStart = slice.openStart - sliceDepth\n    let taken = 0, add = []\n    let {match, type} = this.frontier[frontierDepth]\n    if (inject) {\n      for (let i = 0; i < inject.childCount; i++) add.push(inject.child(i))\n      match = match.matchFragment(inject)\n    }\n    // Computes the amount of (end) open nodes at the end of the\n    // fragment. When 0, the parent is open, but no more. When\n    // negative, nothing is open.\n    let openEndCount = (fragment.size + sliceDepth) - (slice.content.size - slice.openEnd)\n    // Scan over the fragment, fitting as many child nodes as\n    // possible.\n    while (taken < fragment.childCount) {\n      let next = fragment.child(taken), matches = match.matchType(next.type)\n      if (!matches) break\n      taken++\n      if (taken > 1 || openStart == 0 || next.content.size) { // Drop empty open nodes\n        match = matches\n        add.push(closeNodeStart(next.mark(type.allowedMarks(next.marks)), taken == 1 ? openStart : 0,\n                                taken == fragment.childCount ? openEndCount : -1))\n      }\n    }\n    let toEnd = taken == fragment.childCount\n    if (!toEnd) openEndCount = -1\n\n    this.placed = addToFragment(this.placed, frontierDepth, Fragment.from(add))\n    this.frontier[frontierDepth].match = match\n\n    // If the parent types match, and the entire node was moved, and\n    // it's not open, close this frontier node right away.\n    if (toEnd && openEndCount < 0 && parent && parent.type == this.frontier[this.depth].type && this.frontier.length > 1)\n      this.closeFrontierNode()\n\n    // Add new frontier nodes for any open nodes at the end.\n    for (let i = 0, cur = fragment; i < openEndCount; i++) {\n      let node = cur.lastChild\n      this.frontier.push({type: node.type, match: node.contentMatchAt(node.childCount)})\n      cur = node.content\n    }\n\n    // Update `this.unplaced`. Drop the entire node from which we\n    // placed it we got to its end, otherwise just drop the placed\n    // nodes.\n    this.unplaced = !toEnd ? new Slice(dropFromFragment(slice.content, sliceDepth, taken), slice.openStart, slice.openEnd)\n      : sliceDepth == 0 ? Slice.empty\n      : new Slice(dropFromFragment(slice.content, sliceDepth - 1, 1),\n                  sliceDepth - 1, openEndCount < 0 ? slice.openEnd : sliceDepth - 1)\n  }\n\n  mustMoveInline() {\n    if (!this.$to.parent.isTextblock || this.$to.end() == this.$to.pos) return -1\n    let top = this.frontier[this.depth], level\n    if (!top.type.isTextblock || !contentAfterFits(this.$to, this.$to.depth, top.type, top.match, false) ||\n        (this.$to.depth == this.depth && (level = this.findCloseLevel(this.$to)) && level.depth == this.depth)) return -1\n\n    let {depth} = this.$to, after = this.$to.after(depth)\n    while (depth > 1 && after == this.$to.end(--depth)) ++after\n    return after\n  }\n\n  findCloseLevel($to) {\n    scan: for (let i = Math.min(this.depth, $to.depth); i >= 0; i--) {\n      let {match, type} = this.frontier[i]\n      let dropInner = i < $to.depth && $to.end(i + 1) == $to.pos + ($to.depth - (i + 1))\n      let fit = contentAfterFits($to, i, type, match, dropInner)\n      if (!fit) continue\n      for (let d = i - 1; d >= 0; d--) {\n        let {match, type} = this.frontier[d]\n        let matches = contentAfterFits($to, d, type, match, true)\n        if (!matches || matches.childCount) continue scan\n      }\n      return {depth: i, fit, move: dropInner ? $to.doc.resolve($to.after(i + 1)) : $to}\n    }\n  }\n\n  close($to) {\n    let close = this.findCloseLevel($to)\n    if (!close) return null\n\n    while (this.depth > close.depth) this.closeFrontierNode()\n    if (close.fit.childCount) this.placed = addToFragment(this.placed, close.depth, close.fit)\n    $to = close.move\n    for (let d = close.depth + 1; d <= $to.depth; d++) {\n      let node = $to.node(d), add = node.type.contentMatch.fillBefore(node.content, true, $to.index(d))\n      this.openFrontierNode(node.type, node.attrs, add)\n    }\n    return $to\n  }\n\n  openFrontierNode(type, attrs, content) {\n    let top = this.frontier[this.depth]\n    top.match = top.match.matchType(type)\n    this.placed = addToFragment(this.placed, this.depth, Fragment.from(type.create(attrs, content)))\n    this.frontier.push({type, match: type.contentMatch})\n  }\n\n  closeFrontierNode() {\n    let open = this.frontier.pop()\n    let add = open.match.fillBefore(Fragment.empty, true)\n    if (add.childCount) this.placed = addToFragment(this.placed, this.frontier.length, add)\n  }\n}\n\nfunction dropFromFragment(fragment, depth, count) {\n  if (depth == 0) return fragment.cutByIndex(count)\n  return fragment.replaceChild(0, fragment.firstChild.copy(dropFromFragment(fragment.firstChild.content, depth - 1, count)))\n}\n\nfunction addToFragment(fragment, depth, content) {\n  if (depth == 0) return fragment.append(content)\n  return fragment.replaceChild(fragment.childCount - 1,\n                               fragment.lastChild.copy(addToFragment(fragment.lastChild.content, depth - 1, content)))\n}\n\nfunction contentAt(fragment, depth) {\n  for (let i = 0; i < depth; i++) fragment = fragment.firstChild.content\n  return fragment\n}\n\nfunction closeNodeStart(node, openStart, openEnd) {\n  if (openStart <= 0) return node\n  let frag = node.content\n  if (openStart > 1)\n    frag = frag.replaceChild(0, closeNodeStart(frag.firstChild, openStart - 1, frag.childCount == 1 ? openEnd - 1 : 0))\n  if (openStart > 0) {\n    frag = node.type.contentMatch.fillBefore(frag).append(frag)\n    if (openEnd <= 0) frag = frag.append(node.type.contentMatch.matchFragment(frag).fillBefore(Fragment.empty, true))\n  }\n  return node.copy(frag)\n}\n\nfunction contentAfterFits($to, depth, type, match, open) {\n  let node = $to.node(depth), index = open ? $to.indexAfter(depth) : $to.index(depth)\n  if (index == node.childCount && !type.compatibleContent(node.type)) return null\n  let fit = match.fillBefore(node.content, true, index)\n  return fit && !invalidMarks(type, node.content, index) ? fit : null\n}\n\nfunction invalidMarks(type, fragment, start) {\n  for (let i = start; i < fragment.childCount; i++)\n    if (!type.allowsMarks(fragment.child(i).marks)) return true\n  return false\n}\n\n// :: (number, number, Slice) → this\n// Replace a range of the document with a given slice, using `from`,\n// `to`, and the slice's [`openStart`](#model.Slice.openStart) property\n// as hints, rather than fixed start and end points. This method may\n// grow the replaced area or close open nodes in the slice in order to\n// get a fit that is more in line with WYSIWYG expectations, by\n// dropping fully covered parent nodes of the replaced region when\n// they are marked [non-defining](#model.NodeSpec.defining), or\n// including an open parent node from the slice that _is_ marked as\n// [defining](#model.NodeSpec.defining).\n//\n// This is the method, for example, to handle paste. The similar\n// [`replace`](#transform.Transform.replace) method is a more\n// primitive tool which will _not_ move the start and end of its given\n// range, and is useful in situations where you need more precise\n// control over what happens.\nTransform.prototype.replaceRange = function(from, to, slice) {\n  if (!slice.size) return this.deleteRange(from, to)\n\n  let $from = this.doc.resolve(from), $to = this.doc.resolve(to)\n  if (fitsTrivially($from, $to, slice))\n    return this.step(new ReplaceStep(from, to, slice))\n\n  let targetDepths = coveredDepths($from, this.doc.resolve(to))\n  // Can't replace the whole document, so remove 0 if it's present\n  if (targetDepths[targetDepths.length - 1] == 0) targetDepths.pop()\n  // Negative numbers represent not expansion over the whole node at\n  // that depth, but replacing from $from.before(-D) to $to.pos.\n  let preferredTarget = -($from.depth + 1)\n  targetDepths.unshift(preferredTarget)\n  // This loop picks a preferred target depth, if one of the covering\n  // depths is not outside of a defining node, and adds negative\n  // depths for any depth that has $from at its start and does not\n  // cross a defining node.\n  for (let d = $from.depth, pos = $from.pos - 1; d > 0; d--, pos--) {\n    let spec = $from.node(d).type.spec\n    if (spec.defining || spec.isolating) break\n    if (targetDepths.indexOf(d) > -1) preferredTarget = d\n    else if ($from.before(d) == pos) targetDepths.splice(1, 0, -d)\n  }\n  // Try to fit each possible depth of the slice into each possible\n  // target depth, starting with the preferred depths.\n  let preferredTargetIndex = targetDepths.indexOf(preferredTarget)\n\n  let leftNodes = [], preferredDepth = slice.openStart\n  for (let content = slice.content, i = 0;; i++) {\n    let node = content.firstChild\n    leftNodes.push(node)\n    if (i == slice.openStart) break\n    content = node.content\n  }\n  // Back up if the node directly above openStart, or the node above\n  // that separated only by a non-defining textblock node, is defining.\n  if (preferredDepth > 0 && leftNodes[preferredDepth - 1].type.spec.defining &&\n      $from.node(preferredTargetIndex).type != leftNodes[preferredDepth - 1].type)\n    preferredDepth -= 1\n  else if (preferredDepth >= 2 && leftNodes[preferredDepth - 1].isTextblock && leftNodes[preferredDepth - 2].type.spec.defining &&\n           $from.node(preferredTargetIndex).type != leftNodes[preferredDepth - 2].type)\n    preferredDepth -= 2\n\n  for (let j = slice.openStart; j >= 0; j--) {\n    let openDepth = (j + preferredDepth + 1) % (slice.openStart + 1)\n    let insert = leftNodes[openDepth]\n    if (!insert) continue\n    for (let i = 0; i < targetDepths.length; i++) {\n      // Loop over possible expansion levels, starting with the\n      // preferred one\n      let targetDepth = targetDepths[(i + preferredTargetIndex) % targetDepths.length], expand = true\n      if (targetDepth < 0) { expand = false; targetDepth = -targetDepth }\n      let parent = $from.node(targetDepth - 1), index = $from.index(targetDepth - 1)\n      if (parent.canReplaceWith(index, index, insert.type, insert.marks))\n        return this.replace($from.before(targetDepth), expand ? $to.after(targetDepth) : to,\n                            new Slice(closeFragment(slice.content, 0, slice.openStart, openDepth),\n                                      openDepth, slice.openEnd))\n    }\n  }\n\n  let startSteps = this.steps.length\n  for (let i = targetDepths.length - 1; i >= 0; i--) {\n    this.replace(from, to, slice)\n    if (this.steps.length > startSteps) break\n    let depth = targetDepths[i]\n    if (i < 0) continue\n    from = $from.before(depth); to = $to.after(depth)\n  }\n  return this\n}\n\nfunction closeFragment(fragment, depth, oldOpen, newOpen, parent) {\n  if (depth < oldOpen) {\n    let first = fragment.firstChild\n    fragment = fragment.replaceChild(0, first.copy(closeFragment(first.content, depth + 1, oldOpen, newOpen, first)))\n  }\n  if (depth > newOpen) {\n    let match = parent.contentMatchAt(0)\n    let start = match.fillBefore(fragment).append(fragment)\n    fragment = start.append(match.matchFragment(start).fillBefore(Fragment.empty, true))\n  }\n  return fragment\n}\n\n// :: (number, number, Node) → this\n// Replace the given range with a node, but use `from` and `to` as\n// hints, rather than precise positions. When from and to are the same\n// and are at the start or end of a parent node in which the given\n// node doesn't fit, this method may _move_ them out towards a parent\n// that does allow the given node to be placed. When the given range\n// completely covers a parent node, this method may completely replace\n// that parent node.\nTransform.prototype.replaceRangeWith = function(from, to, node) {\n  if (!node.isInline && from == to && this.doc.resolve(from).parent.content.size) {\n    let point = insertPoint(this.doc, from, node.type)\n    if (point != null) from = to = point\n  }\n  return this.replaceRange(from, to, new Slice(Fragment.from(node), 0, 0))\n}\n\n// :: (number, number) → this\n// Delete the given range, expanding it to cover fully covered\n// parent nodes until a valid replace is found.\nTransform.prototype.deleteRange = function(from, to) {\n  let $from = this.doc.resolve(from), $to = this.doc.resolve(to)\n  let covered = coveredDepths($from, $to)\n  for (let i = 0; i < covered.length; i++) {\n    let depth = covered[i], last = i == covered.length - 1\n    if ((last && depth == 0) || $from.node(depth).type.contentMatch.validEnd)\n      return this.delete($from.start(depth), $to.end(depth))\n    if (depth > 0 && (last || $from.node(depth - 1).canReplace($from.index(depth - 1), $to.indexAfter(depth - 1))))\n      return this.delete($from.before(depth), $to.after(depth))\n  }\n  for (let d = 1; d <= $from.depth && d <= $to.depth; d++) {\n    if (from - $from.start(d) == $from.depth - d && to > $from.end(d) && $to.end(d) - to != $to.depth - d)\n      return this.delete($from.before(d), to)\n  }\n  return this.delete(from, to)\n}\n\n// : (ResolvedPos, ResolvedPos) → [number]\n// Returns an array of all depths for which $from - $to spans the\n// whole content of the nodes at that depth.\nfunction coveredDepths($from, $to) {\n  let result = [], minDepth = Math.min($from.depth, $to.depth)\n  for (let d = minDepth; d >= 0; d--) {\n    let start = $from.start(d)\n    if (start < $from.pos - ($from.depth - d) ||\n        $to.end(d) > $to.pos + ($to.depth - d) ||\n        $from.node(d).type.spec.isolating ||\n        $to.node(d).type.spec.isolating) break\n    if (start == $to.start(d)) result.push(d)\n  }\n  return result\n}\n","import {Mark} from \"./mark\"\n\n// ::- You can [_resolve_](#model.Node.resolve) a position to get more\n// information about it. Objects of this class represent such a\n// resolved position, providing various pieces of context information,\n// and some helper methods.\n//\n// Throughout this interface, methods that take an optional `depth`\n// parameter will interpret undefined as `this.depth` and negative\n// numbers as `this.depth + value`.\nexport class ResolvedPos {\n  constructor(pos, path, parentOffset) {\n    // :: number The position that was resolved.\n    this.pos = pos\n    this.path = path\n    // :: number\n    // The number of levels the parent node is from the root. If this\n    // position points directly into the root node, it is 0. If it\n    // points into a top-level paragraph, 1, and so on.\n    this.depth = path.length / 3 - 1\n    // :: number The offset this position has into its parent node.\n    this.parentOffset = parentOffset\n  }\n\n  resolveDepth(val) {\n    if (val == null) return this.depth\n    if (val < 0) return this.depth + val\n    return val\n  }\n\n  // :: Node\n  // The parent node that the position points into. Note that even if\n  // a position points into a text node, that node is not considered\n  // the parent—text nodes are ‘flat’ in this model, and have no content.\n  get parent() { return this.node(this.depth) }\n\n  // :: Node\n  // The root node in which the position was resolved.\n  get doc() { return this.node(0) }\n\n  // :: (?number) → Node\n  // The ancestor node at the given level. `p.node(p.depth)` is the\n  // same as `p.parent`.\n  node(depth) { return this.path[this.resolveDepth(depth) * 3] }\n\n  // :: (?number) → number\n  // The index into the ancestor at the given level. If this points at\n  // the 3rd node in the 2nd paragraph on the top level, for example,\n  // `p.index(0)` is 1 and `p.index(1)` is 2.\n  index(depth) { return this.path[this.resolveDepth(depth) * 3 + 1] }\n\n  // :: (?number) → number\n  // The index pointing after this position into the ancestor at the\n  // given level.\n  indexAfter(depth) {\n    depth = this.resolveDepth(depth)\n    return this.index(depth) + (depth == this.depth && !this.textOffset ? 0 : 1)\n  }\n\n  // :: (?number) → number\n  // The (absolute) position at the start of the node at the given\n  // level.\n  start(depth) {\n    depth = this.resolveDepth(depth)\n    return depth == 0 ? 0 : this.path[depth * 3 - 1] + 1\n  }\n\n  // :: (?number) → number\n  // The (absolute) position at the end of the node at the given\n  // level.\n  end(depth) {\n    depth = this.resolveDepth(depth)\n    return this.start(depth) + this.node(depth).content.size\n  }\n\n  // :: (?number) → number\n  // The (absolute) position directly before the wrapping node at the\n  // given level, or, when `depth` is `this.depth + 1`, the original\n  // position.\n  before(depth) {\n    depth = this.resolveDepth(depth)\n    if (!depth) throw new RangeError(\"There is no position before the top-level node\")\n    return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1]\n  }\n\n  // :: (?number) → number\n  // The (absolute) position directly after the wrapping node at the\n  // given level, or the original position when `depth` is `this.depth + 1`.\n  after(depth) {\n    depth = this.resolveDepth(depth)\n    if (!depth) throw new RangeError(\"There is no position after the top-level node\")\n    return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1] + this.path[depth * 3].nodeSize\n  }\n\n  // :: number\n  // When this position points into a text node, this returns the\n  // distance between the position and the start of the text node.\n  // Will be zero for positions that point between nodes.\n  get textOffset() { return this.pos - this.path[this.path.length - 1] }\n\n  // :: ?Node\n  // Get the node directly after the position, if any. If the position\n  // points into a text node, only the part of that node after the\n  // position is returned.\n  get nodeAfter() {\n    let parent = this.parent, index = this.index(this.depth)\n    if (index == parent.childCount) return null\n    let dOff = this.pos - this.path[this.path.length - 1], child = parent.child(index)\n    return dOff ? parent.child(index).cut(dOff) : child\n  }\n\n  // :: ?Node\n  // Get the node directly before the position, if any. If the\n  // position points into a text node, only the part of that node\n  // before the position is returned.\n  get nodeBefore() {\n    let index = this.index(this.depth)\n    let dOff = this.pos - this.path[this.path.length - 1]\n    if (dOff) return this.parent.child(index).cut(0, dOff)\n    return index == 0 ? null : this.parent.child(index - 1)\n  }\n\n  // :: (number, ?number) → number\n  // Get the position at the given index in the parent node at the\n  // given depth (which defaults to `this.depth`).\n  posAtIndex(index, depth) {\n    depth = this.resolveDepth(depth)\n    let node = this.path[depth * 3], pos = depth == 0 ? 0 : this.path[depth * 3 - 1] + 1\n    for (let i = 0; i < index; i++) pos += node.child(i).nodeSize\n    return pos\n  }\n\n  // :: () → [Mark]\n  // Get the marks at this position, factoring in the surrounding\n  // marks' [`inclusive`](#model.MarkSpec.inclusive) property. If the\n  // position is at the start of a non-empty node, the marks of the\n  // node after it (if any) are returned.\n  marks() {\n    let parent = this.parent, index = this.index()\n\n    // In an empty parent, return the empty array\n    if (parent.content.size == 0) return Mark.none\n\n    // When inside a text node, just return the text node's marks\n    if (this.textOffset) return parent.child(index).marks\n\n    let main = parent.maybeChild(index - 1), other = parent.maybeChild(index)\n    // If the `after` flag is true of there is no node before, make\n    // the node after this position the main reference.\n    if (!main) { let tmp = main; main = other; other = tmp }\n\n    // Use all marks in the main node, except those that have\n    // `inclusive` set to false and are not present in the other node.\n    let marks = main.marks\n    for (var i = 0; i < marks.length; i++)\n      if (marks[i].type.spec.inclusive === false && (!other || !marks[i].isInSet(other.marks)))\n        marks = marks[i--].removeFromSet(marks)\n\n    return marks\n  }\n\n  // :: (ResolvedPos) → ?[Mark]\n  // Get the marks after the current position, if any, except those\n  // that are non-inclusive and not present at position `$end`. This\n  // is mostly useful for getting the set of marks to preserve after a\n  // deletion. Will return `null` if this position is at the end of\n  // its parent node or its parent node isn't a textblock (in which\n  // case no marks should be preserved).\n  marksAcross($end) {\n    let after = this.parent.maybeChild(this.index())\n    if (!after || !after.isInline) return null\n\n    let marks = after.marks, next = $end.parent.maybeChild($end.index())\n    for (var i = 0; i < marks.length; i++)\n      if (marks[i].type.spec.inclusive === false && (!next || !marks[i].isInSet(next.marks)))\n        marks = marks[i--].removeFromSet(marks)\n    return marks\n  }\n\n  // :: (number) → number\n  // The depth up to which this position and the given (non-resolved)\n  // position share the same parent nodes.\n  sharedDepth(pos) {\n    for (let depth = this.depth; depth > 0; depth--)\n      if (this.start(depth) <= pos && this.end(depth) >= pos) return depth\n    return 0\n  }\n\n  // :: (?ResolvedPos, ?(Node) → bool) → ?NodeRange\n  // Returns a range based on the place where this position and the\n  // given position diverge around block content. If both point into\n  // the same textblock, for example, a range around that textblock\n  // will be returned. If they point into different blocks, the range\n  // around those blocks in their shared ancestor is returned. You can\n  // pass in an optional predicate that will be called with a parent\n  // node to see if a range into that parent is acceptable.\n  blockRange(other = this, pred) {\n    if (other.pos < this.pos) return other.blockRange(this)\n    for (let d = this.depth - (this.parent.inlineContent || this.pos == other.pos ? 1 : 0); d >= 0; d--)\n      if (other.pos <= this.end(d) && (!pred || pred(this.node(d))))\n        return new NodeRange(this, other, d)\n  }\n\n  // :: (ResolvedPos) → bool\n  // Query whether the given position shares the same parent node.\n  sameParent(other) {\n    return this.pos - this.parentOffset == other.pos - other.parentOffset\n  }\n\n  // :: (ResolvedPos) → ResolvedPos\n  // Return the greater of this and the given position.\n  max(other) {\n    return other.pos > this.pos ? other : this\n  }\n\n  // :: (ResolvedPos) → ResolvedPos\n  // Return the smaller of this and the given position.\n  min(other) {\n    return other.pos < this.pos ? other : this\n  }\n\n  toString() {\n    let str = \"\"\n    for (let i = 1; i <= this.depth; i++)\n      str += (str ? \"/\" : \"\") + this.node(i).type.name + \"_\" + this.index(i - 1)\n    return str + \":\" + this.parentOffset\n  }\n\n  static resolve(doc, pos) {\n    if (!(pos >= 0 && pos <= doc.content.size)) throw new RangeError(\"Position \" + pos + \" out of range\")\n    let path = []\n    let start = 0, parentOffset = pos\n    for (let node = doc;;) {\n      let {index, offset} = node.content.findIndex(parentOffset)\n      let rem = parentOffset - offset\n      path.push(node, index, start + offset)\n      if (!rem) break\n      node = node.child(index)\n      if (node.isText) break\n      parentOffset = rem - 1\n      start += offset + 1\n    }\n    return new ResolvedPos(pos, path, parentOffset)\n  }\n\n  static resolveCached(doc, pos) {\n    for (let i = 0; i < resolveCache.length; i++) {\n      let cached = resolveCache[i]\n      if (cached.pos == pos && cached.doc == doc) return cached\n    }\n    let result = resolveCache[resolveCachePos] = ResolvedPos.resolve(doc, pos)\n    resolveCachePos = (resolveCachePos + 1) % resolveCacheSize\n    return result\n  }\n}\n\nlet resolveCache = [], resolveCachePos = 0, resolveCacheSize = 12\n\n// ::- Represents a flat range of content, i.e. one that starts and\n// ends in the same node.\nexport class NodeRange {\n  // :: (ResolvedPos, ResolvedPos, number)\n  // Construct a node range. `$from` and `$to` should point into the\n  // same node until at least the given `depth`, since a node range\n  // denotes an adjacent set of nodes in a single parent node.\n  constructor($from, $to, depth) {\n    // :: ResolvedPos A resolved position along the start of the\n    // content. May have a `depth` greater than this object's `depth`\n    // property, since these are the positions that were used to\n    // compute the range, not re-resolved positions directly at its\n    // boundaries.\n    this.$from = $from\n    // :: ResolvedPos A position along the end of the content. See\n    // caveat for [`$from`](#model.NodeRange.$from).\n    this.$to = $to\n    // :: number The depth of the node that this range points into.\n    this.depth = depth\n  }\n\n  // :: number The position at the start of the range.\n  get start() { return this.$from.before(this.depth + 1) }\n  // :: number The position at the end of the range.\n  get end() { return this.$to.after(this.depth + 1) }\n\n  // :: Node The parent node that the range points into.\n  get parent() { return this.$from.node(this.depth) }\n  // :: number The start index of the range in the parent node.\n  get startIndex() { return this.$from.index(this.depth) }\n  // :: number The end index of the range in the parent node.\n  get endIndex() { return this.$to.indexAfter(this.depth) }\n}\n","// :: (node: ProseMirrorNode, descend: ?boolean) → [{ node: ProseMirrorNode, pos: number }]\n// Flattens descendants of a given `node`. It doesn't descend into a node when descend argument is `false` (defaults to `true`).\n//\n// ```javascript\n// const children = flatten(node);\n// ```\nexport const flatten = (node, descend = true) => {\n  if (!node) {\n    throw new Error('Invalid \"node\" parameter');\n  }\n  const result = [];\n  node.descendants((child, pos) => {\n    result.push({ node: child, pos });\n    if (!descend) {\n      return false;\n    }\n  });\n  return result;\n};\n\n// :: (node: ProseMirrorNode, predicate: (node: ProseMirrorNode) → boolean, descend: ?boolean) → [{ node: ProseMirrorNode, pos: number }]\n// Iterates over descendants of a given `node`, returning child nodes predicate returns truthy for. It doesn't descend into a node when descend argument is `false` (defaults to `true`).\n//\n// ```javascript\n// const textNodes = findChildren(node, child => child.isText, false);\n// ```\nexport const findChildren = (node, predicate, descend) => {\n  if (!node) {\n    throw new Error('Invalid \"node\" parameter');\n  } else if (!predicate) {\n    throw new Error('Invalid \"predicate\" parameter');\n  }\n  return flatten(node, descend).filter(child => predicate(child.node));\n};\n\n// :: (node: ProseMirrorNode, descend: ?boolean) → [{ node: ProseMirrorNode, pos: number }]\n// Returns text nodes of a given `node`. It doesn't descend into a node when descend argument is `false` (defaults to `true`).\n//\n// ```javascript\n// const textNodes = findTextNodes(node);\n// ```\nexport const findTextNodes = (node, descend) => {\n  return findChildren(node, child => child.isText, descend);\n};\n\n// :: (node: ProseMirrorNode, descend: ?boolean) → [{ node: ProseMirrorNode, pos: number }]\n// Returns inline nodes of a given `node`. It doesn't descend into a node when descend argument is `false` (defaults to `true`).\n//\n// ```javascript\n// const inlineNodes = findInlineNodes(node);\n// ```\nexport const findInlineNodes = (node, descend) => {\n  return findChildren(node, child => child.isInline, descend);\n};\n\n// :: (node: ProseMirrorNode, descend: ?boolean) → [{ node: ProseMirrorNode, pos: number }]\n// Returns block descendants of a given `node`. It doesn't descend into a node when descend argument is `false` (defaults to `true`).\n//\n// ```javascript\n// const blockNodes = findBlockNodes(node);\n// ```\nexport const findBlockNodes = (node, descend) => {\n  return findChildren(node, child => child.isBlock, descend);\n};\n\n// :: (node: ProseMirrorNode, predicate: (attrs: ?Object) → boolean, descend: ?boolean) → [{ node: ProseMirrorNode, pos: number }]\n// Iterates over descendants of a given `node`, returning child nodes predicate returns truthy for. It doesn't descend into a node when descend argument is `false` (defaults to `true`).\n//\n// ```javascript\n// const mergedCells = findChildrenByAttr(table, attrs => attrs.colspan === 2);\n// ```\nexport const findChildrenByAttr = (node, predicate, descend) => {\n  return findChildren(node, child => !!predicate(child.attrs), descend);\n};\n\n// :: (node: ProseMirrorNode, nodeType: NodeType, descend: ?boolean) → [{ node: ProseMirrorNode, pos: number }]\n// Iterates over descendants of a given `node`, returning child nodes of a given nodeType. It doesn't descend into a node when descend argument is `false` (defaults to `true`).\n//\n// ```javascript\n// const cells = findChildrenByType(table, schema.nodes.tableCell);\n// ```\nexport const findChildrenByType = (node, nodeType, descend) => {\n  return findChildren(node, child => child.type === nodeType, descend);\n};\n\n// :: (node: ProseMirrorNode, markType: markType, descend: ?boolean) → [{ node: ProseMirrorNode, pos: number }]\n// Iterates over descendants of a given `node`, returning child nodes that have a mark of a given markType. It doesn't descend into a `node` when descend argument is `false` (defaults to `true`).\n//\n// ```javascript\n// const nodes = findChildrenByMark(state.doc, schema.marks.strong);\n// ```\nexport const findChildrenByMark = (node, markType, descend) => {\n  return findChildren(node, child => markType.isInSet(child.marks), descend);\n};\n\n// :: (node: ProseMirrorNode, nodeType: NodeType) → boolean\n// Returns `true` if a given node contains nodes of a given `nodeType`\n//\n// ```javascript\n// if (contains(panel, schema.nodes.listItem)) {\n//   // ...\n// }\n// ```\nexport const contains = (node, nodeType) => {\n  return !!findChildrenByType(node, nodeType).length;\n};\n","import {Fragment} from \"./fragment\"\n\n// ::- Instances of this class represent a match state of a node\n// type's [content expression](#model.NodeSpec.content), and can be\n// used to find out whether further content matches here, and whether\n// a given position is a valid end of the node.\nexport class ContentMatch {\n  constructor(validEnd) {\n    // :: bool\n    // True when this match state represents a valid end of the node.\n    this.validEnd = validEnd\n    this.next = []\n    this.wrapCache = []\n  }\n\n  static parse(string, nodeTypes) {\n    let stream = new TokenStream(string, nodeTypes)\n    if (stream.next == null) return ContentMatch.empty\n    let expr = parseExpr(stream)\n    if (stream.next) stream.err(\"Unexpected trailing text\")\n    let match = dfa(nfa(expr))\n    checkForDeadEnds(match, stream)\n    return match\n  }\n\n  // :: (NodeType) → ?ContentMatch\n  // Match a node type, returning a match after that node if\n  // successful.\n  matchType(type) {\n    for (let i = 0; i < this.next.length; i += 2)\n      if (this.next[i] == type) return this.next[i + 1]\n    return null\n  }\n\n  // :: (Fragment, ?number, ?number) → ?ContentMatch\n  // Try to match a fragment. Returns the resulting match when\n  // successful.\n  matchFragment(frag, start = 0, end = frag.childCount) {\n    let cur = this\n    for (let i = start; cur && i < end; i++)\n      cur = cur.matchType(frag.child(i).type)\n    return cur\n  }\n\n  get inlineContent() {\n    let first = this.next[0]\n    return first ? first.isInline : false\n  }\n\n  // :: ?NodeType\n  // Get the first matching node type at this match position that can\n  // be generated.\n  get defaultType() {\n    for (let i = 0; i < this.next.length; i += 2) {\n      let type = this.next[i]\n      if (!(type.isText || type.hasRequiredAttrs())) return type\n    }\n  }\n\n  compatible(other) {\n    for (let i = 0; i < this.next.length; i += 2)\n      for (let j = 0; j < other.next.length; j += 2)\n        if (this.next[i] == other.next[j]) return true\n    return false\n  }\n\n  // :: (Fragment, bool, ?number) → ?Fragment\n  // Try to match the given fragment, and if that fails, see if it can\n  // be made to match by inserting nodes in front of it. When\n  // successful, return a fragment of inserted nodes (which may be\n  // empty if nothing had to be inserted). When `toEnd` is true, only\n  // return a fragment if the resulting match goes to the end of the\n  // content expression.\n  fillBefore(after, toEnd = false, startIndex = 0) {\n    let seen = [this]\n    function search(match, types) {\n      let finished = match.matchFragment(after, startIndex)\n      if (finished && (!toEnd || finished.validEnd))\n        return Fragment.from(types.map(tp => tp.createAndFill()))\n\n      for (let i = 0; i < match.next.length; i += 2) {\n        let type = match.next[i], next = match.next[i + 1]\n        if (!(type.isText || type.hasRequiredAttrs()) && seen.indexOf(next) == -1) {\n          seen.push(next)\n          let found = search(next, types.concat(type))\n          if (found) return found\n        }\n      }\n    }\n\n    return search(this, [])\n  }\n\n  // :: (NodeType) → ?[NodeType]\n  // Find a set of wrapping node types that would allow a node of the\n  // given type to appear at this position. The result may be empty\n  // (when it fits directly) and will be null when no such wrapping\n  // exists.\n  findWrapping(target) {\n    for (let i = 0; i < this.wrapCache.length; i += 2)\n      if (this.wrapCache[i] == target) return this.wrapCache[i + 1]\n    let computed = this.computeWrapping(target)\n    this.wrapCache.push(target, computed)\n    return computed\n  }\n\n  computeWrapping(target) {\n    let seen = Object.create(null), active = [{match: this, type: null, via: null}]\n    while (active.length) {\n      let current = active.shift(), match = current.match\n      if (match.matchType(target)) {\n        let result = []\n        for (let obj = current; obj.type; obj = obj.via)\n          result.push(obj.type)\n        return result.reverse()\n      }\n      for (let i = 0; i < match.next.length; i += 2) {\n        let type = match.next[i]\n        if (!type.isLeaf && !type.hasRequiredAttrs() && !(type.name in seen) && (!current.type || match.next[i + 1].validEnd)) {\n          active.push({match: type.contentMatch, type, via: current})\n          seen[type.name] = true\n        }\n      }\n    }\n  }\n\n  // :: number\n  // The number of outgoing edges this node has in the finite\n  // automaton that describes the content expression.\n  get edgeCount() {\n    return this.next.length >> 1\n  }\n\n  // :: (number) → {type: NodeType, next: ContentMatch}\n  // Get the _n_​th outgoing edge from this node in the finite\n  // automaton that describes the content expression.\n  edge(n) {\n    let i = n << 1\n    if (i >= this.next.length) throw new RangeError(`There's no ${n}th edge in this content match`)\n    return {type: this.next[i], next: this.next[i + 1]}\n  }\n\n  toString() {\n    let seen = []\n    function scan(m) {\n      seen.push(m)\n      for (let i = 1; i < m.next.length; i += 2)\n        if (seen.indexOf(m.next[i]) == -1) scan(m.next[i])\n    }\n    scan(this)\n    return seen.map((m, i) => {\n      let out = i + (m.validEnd ? \"*\" : \" \") + \" \"\n      for (let i = 0; i < m.next.length; i += 2)\n        out += (i ? \", \" : \"\") + m.next[i].name + \"->\" + seen.indexOf(m.next[i + 1])\n      return out\n    }).join(\"\\n\")\n  }\n}\n\nContentMatch.empty = new ContentMatch(true)\n\nclass TokenStream {\n  constructor(string, nodeTypes) {\n    this.string = string\n    this.nodeTypes = nodeTypes\n    this.inline = null\n    this.pos = 0\n    this.tokens = string.split(/\\s*(?=\\b|\\W|$)/)\n    if (this.tokens[this.tokens.length - 1] == \"\") this.tokens.pop()\n    if (this.tokens[0] == \"\") this.tokens.unshift()\n  }\n\n  get next() { return this.tokens[this.pos] }\n\n  eat(tok) { return this.next == tok && (this.pos++ || true) }\n\n  err(str) { throw new SyntaxError(str + \" (in content expression '\" + this.string + \"')\") }\n}\n\nfunction parseExpr(stream) {\n  let exprs = []\n  do { exprs.push(parseExprSeq(stream)) }\n  while (stream.eat(\"|\"))\n  return exprs.length == 1 ? exprs[0] : {type: \"choice\", exprs}\n}\n\nfunction parseExprSeq(stream) {\n  let exprs = []\n  do { exprs.push(parseExprSubscript(stream)) }\n  while (stream.next && stream.next != \")\" && stream.next != \"|\")\n  return exprs.length == 1 ? exprs[0] : {type: \"seq\", exprs}\n}\n\nfunction parseExprSubscript(stream) {\n  let expr = parseExprAtom(stream)\n  for (;;) {\n    if (stream.eat(\"+\"))\n      expr = {type: \"plus\", expr}\n    else if (stream.eat(\"*\"))\n      expr = {type: \"star\", expr}\n    else if (stream.eat(\"?\"))\n      expr = {type: \"opt\", expr}\n    else if (stream.eat(\"{\"))\n      expr = parseExprRange(stream, expr)\n    else break\n  }\n  return expr\n}\n\nfunction parseNum(stream) {\n  if (/\\D/.test(stream.next)) stream.err(\"Expected number, got '\" + stream.next + \"'\")\n  let result = Number(stream.next)\n  stream.pos++\n  return result\n}\n\nfunction parseExprRange(stream, expr) {\n  let min = parseNum(stream), max = min\n  if (stream.eat(\",\")) {\n    if (stream.next != \"}\") max = parseNum(stream)\n    else max = -1\n  }\n  if (!stream.eat(\"}\")) stream.err(\"Unclosed braced range\")\n  return {type: \"range\", min, max, expr}\n}\n\nfunction resolveName(stream, name) {\n  let types = stream.nodeTypes, type = types[name]\n  if (type) return [type]\n  let result = []\n  for (let typeName in types) {\n    let type = types[typeName]\n    if (type.groups.indexOf(name) > -1) result.push(type)\n  }\n  if (result.length == 0) stream.err(\"No node type or group '\" + name + \"' found\")\n  return result\n}\n\nfunction parseExprAtom(stream) {\n  if (stream.eat(\"(\")) {\n    let expr = parseExpr(stream)\n    if (!stream.eat(\")\")) stream.err(\"Missing closing paren\")\n    return expr\n  } else if (!/\\W/.test(stream.next)) {\n    let exprs = resolveName(stream, stream.next).map(type => {\n      if (stream.inline == null) stream.inline = type.isInline\n      else if (stream.inline != type.isInline) stream.err(\"Mixing inline and block content\")\n      return {type: \"name\", value: type}\n    })\n    stream.pos++\n    return exprs.length == 1 ? exprs[0] : {type: \"choice\", exprs}\n  } else {\n    stream.err(\"Unexpected token '\" + stream.next + \"'\")\n  }\n}\n\n// The code below helps compile a regular-expression-like language\n// into a deterministic finite automaton. For a good introduction to\n// these concepts, see https://swtch.com/~rsc/regexp/regexp1.html\n\n// : (Object) → [[{term: ?any, to: number}]]\n// Construct an NFA from an expression as returned by the parser. The\n// NFA is represented as an array of states, which are themselves\n// arrays of edges, which are `{term, to}` objects. The first state is\n// the entry state and the last node is the success state.\n//\n// Note that unlike typical NFAs, the edge ordering in this one is\n// significant, in that it is used to contruct filler content when\n// necessary.\nfunction nfa(expr) {\n  let nfa = [[]]\n  connect(compile(expr, 0), node())\n  return nfa\n\n  function node() { return nfa.push([]) - 1 }\n  function edge(from, to, term) {\n    let edge = {term, to}\n    nfa[from].push(edge)\n    return edge\n  }\n  function connect(edges, to) { edges.forEach(edge => edge.to = to) }\n\n  function compile(expr, from) {\n    if (expr.type == \"choice\") {\n      return expr.exprs.reduce((out, expr) => out.concat(compile(expr, from)), [])\n    } else if (expr.type == \"seq\") {\n      for (let i = 0;; i++) {\n        let next = compile(expr.exprs[i], from)\n        if (i == expr.exprs.length - 1) return next\n        connect(next, from = node())\n      }\n    } else if (expr.type == \"star\") {\n      let loop = node()\n      edge(from, loop)\n      connect(compile(expr.expr, loop), loop)\n      return [edge(loop)]\n    } else if (expr.type == \"plus\") {\n      let loop = node()\n      connect(compile(expr.expr, from), loop)\n      connect(compile(expr.expr, loop), loop)\n      return [edge(loop)]\n    } else if (expr.type == \"opt\") {\n      return [edge(from)].concat(compile(expr.expr, from))\n    } else if (expr.type == \"range\") {\n      let cur = from\n      for (let i = 0; i < expr.min; i++) {\n        let next = node()\n        connect(compile(expr.expr, cur), next)\n        cur = next\n      }\n      if (expr.max == -1) {\n        connect(compile(expr.expr, cur), cur)\n      } else {\n        for (let i = expr.min; i < expr.max; i++) {\n          let next = node()\n          edge(cur, next)\n          connect(compile(expr.expr, cur), next)\n          cur = next\n        }\n      }\n      return [edge(cur)]\n    } else if (expr.type == \"name\") {\n      return [edge(from, null, expr.value)]\n    }\n  }\n}\n\nfunction cmp(a, b) { return b - a }\n\n// Get the set of nodes reachable by null edges from `node`. Omit\n// nodes with only a single null-out-edge, since they may lead to\n// needless duplicated nodes.\nfunction nullFrom(nfa, node) {\n  let result = []\n  scan(node)\n  return result.sort(cmp)\n\n  function scan(node) {\n    let edges = nfa[node]\n    if (edges.length == 1 && !edges[0].term) return scan(edges[0].to)\n    result.push(node)\n    for (let i = 0; i < edges.length; i++) {\n      let {term, to} = edges[i]\n      if (!term && result.indexOf(to) == -1) scan(to)\n    }\n  }\n}\n\n// : ([[{term: ?any, to: number}]]) → ContentMatch\n// Compiles an NFA as produced by `nfa` into a DFA, modeled as a set\n// of state objects (`ContentMatch` instances) with transitions\n// between them.\nfunction dfa(nfa) {\n  let labeled = Object.create(null)\n  return explore(nullFrom(nfa, 0))\n\n  function explore(states) {\n    let out = []\n    states.forEach(node => {\n      nfa[node].forEach(({term, to}) => {\n        if (!term) return\n        let known = out.indexOf(term), set = known > -1 && out[known + 1]\n        nullFrom(nfa, to).forEach(node => {\n          if (!set) out.push(term, set = [])\n          if (set.indexOf(node) == -1) set.push(node)\n        })\n      })\n    })\n    let state = labeled[states.join(\",\")] = new ContentMatch(states.indexOf(nfa.length - 1) > -1)\n    for (let i = 0; i < out.length; i += 2) {\n      let states = out[i + 1].sort(cmp)\n      state.next.push(out[i], labeled[states.join(\",\")] || explore(states))\n    }\n    return state\n  }\n}\n\nfunction checkForDeadEnds(match, stream) {\n  for (let i = 0, work = [match]; i < work.length; i++) {\n    let state = work[i], dead = !state.validEnd, nodes = []\n    for (let j = 0; j < state.next.length; j += 2) {\n      let node = state.next[j], next = state.next[j + 1]\n      nodes.push(node.name)\n      if (dead && !(node.isText || node.hasRequiredAttrs())) dead = false\n      if (work.indexOf(next) == -1) work.push(next)\n    }\n    if (dead) stream.err(\"Only non-generatable nodes (\" + nodes.join(\", \") + \") in a required position (see https://prosemirror.net/docs/guide/#generatable)\")\n  }\n}\n","import {Schema} from \"prosemirror-model\"\n\n// ::Schema Document schema for the data model used by CommonMark.\nexport const schema = new Schema({\n  nodes: {\n    doc: {\n      content: \"block+\"\n    },\n\n    paragraph: {\n      content: \"inline*\",\n      group: \"block\",\n      parseDOM: [{tag: \"p\"}],\n      toDOM() { return [\"p\", 0] }\n    },\n\n    blockquote: {\n      content: \"block+\",\n      group: \"block\",\n      parseDOM: [{tag: \"blockquote\"}],\n      toDOM() { return [\"blockquote\", 0] }\n    },\n\n    horizontal_rule: {\n      group: \"block\",\n      parseDOM: [{tag: \"hr\"}],\n      toDOM() { return [\"div\", [\"hr\"]] }\n    },\n\n    heading: {\n      attrs: {level: {default: 1}},\n      content: \"(text | image)*\",\n      group: \"block\",\n      defining: true,\n      parseDOM: [{tag: \"h1\", attrs: {level: 1}},\n                 {tag: \"h2\", attrs: {level: 2}},\n                 {tag: \"h3\", attrs: {level: 3}},\n                 {tag: \"h4\", attrs: {level: 4}},\n                 {tag: \"h5\", attrs: {level: 5}},\n                 {tag: \"h6\", attrs: {level: 6}}],\n      toDOM(node) { return [\"h\" + node.attrs.level, 0] }\n    },\n\n    code_block: {\n      content: \"text*\",\n      group: \"block\",\n      code: true,\n      defining: true,\n      marks: \"\",\n      attrs: {params: {default: \"\"}},\n      parseDOM: [{tag: \"pre\", preserveWhitespace: \"full\", getAttrs: node => (\n        {params: node.getAttribute(\"data-params\") || \"\"}\n      )}],\n      toDOM(node) { return [\"pre\", node.attrs.params ? {\"data-params\": node.attrs.params} : {}, [\"code\", 0]] }\n    },\n\n    ordered_list: {\n      content: \"list_item+\",\n      group: \"block\",\n      attrs: {order: {default: 1}, tight: {default: false}},\n      parseDOM: [{tag: \"ol\", getAttrs(dom) {\n        return {order: dom.hasAttribute(\"start\") ? +dom.getAttribute(\"start\") : 1,\n                tight: dom.hasAttribute(\"data-tight\")}\n      }}],\n      toDOM(node) {\n        return [\"ol\", {start: node.attrs.order == 1 ? null : node.attrs.order,\n                       \"data-tight\": node.attrs.tight ? \"true\" : null}, 0]\n      }\n    },\n\n    bullet_list: {\n      content: \"list_item+\",\n      group: \"block\",\n      attrs: {tight: {default: false}},\n      parseDOM: [{tag: \"ul\", getAttrs: dom => ({tight: dom.hasAttribute(\"data-tight\")})}],\n      toDOM(node) { return [\"ul\", {\"data-tight\": node.attrs.tight ? \"true\" : null}, 0] }\n    },\n\n    list_item: {\n      content: \"paragraph block*\",\n      defining: true,\n      parseDOM: [{tag: \"li\"}],\n      toDOM() { return [\"li\", 0] }\n    },\n\n    text: {\n      group: \"inline\"\n    },\n\n    image: {\n      inline: true,\n      attrs: {\n        src: {},\n        alt: {default: null},\n        title: {default: null}\n      },\n      group: \"inline\",\n      draggable: true,\n      parseDOM: [{tag: \"img[src]\", getAttrs(dom) {\n        return {\n          src: dom.getAttribute(\"src\"),\n          title: dom.getAttribute(\"title\"),\n          alt: dom.getAttribute(\"alt\")\n        }\n      }}],\n      toDOM(node) { return [\"img\", node.attrs] }\n    },\n\n    hard_break: {\n      inline: true,\n      group: \"inline\",\n      selectable: false,\n      parseDOM: [{tag: \"br\"}],\n      toDOM() { return [\"br\"] }\n    }\n  },\n\n  marks: {\n    em: {\n      parseDOM: [{tag: \"i\"}, {tag: \"em\"},\n                 {style: \"font-style\", getAttrs: value => value == \"italic\" && null}],\n      toDOM() { return [\"em\"] }\n    },\n\n    strong: {\n      parseDOM: [{tag: \"b\"}, {tag: \"strong\"},\n                 {style: \"font-weight\", getAttrs: value => /^(bold(er)?|[5-9]\\d{2,})$/.test(value) && null}],\n      toDOM() { return [\"strong\"] }\n    },\n\n    link: {\n      attrs: {\n        href: {},\n        title: {default: null}\n      },\n      inclusive: false,\n      parseDOM: [{tag: \"a[href]\", getAttrs(dom) {\n        return {href: dom.getAttribute(\"href\"), title: dom.getAttribute(\"title\")}\n      }}],\n      toDOM(node) { return [\"a\", node.attrs] }\n    },\n\n    code: {\n      parseDOM: [{tag: \"code\"}],\n      toDOM() { return [\"code\"] }\n    }\n  }\n})\n","import {Fragment} from \"./fragment\"\nimport {Slice} from \"./replace\"\nimport {Mark} from \"./mark\"\n\n// ParseOptions:: interface\n// These are the options recognized by the\n// [`parse`](#model.DOMParser.parse) and\n// [`parseSlice`](#model.DOMParser.parseSlice) methods.\n//\n//   preserveWhitespace:: ?union<bool, \"full\">\n//   By default, whitespace is collapsed as per HTML's rules. Pass\n//   `true` to preserve whitespace, but normalize newlines to\n//   spaces, and `\"full\"` to preserve whitespace entirely.\n//\n//   findPositions:: ?[{node: dom.Node, offset: number}]\n//   When given, the parser will, beside parsing the content,\n//   record the document positions of the given DOM positions. It\n//   will do so by writing to the objects, adding a `pos` property\n//   that holds the document position. DOM positions that are not\n//   in the parsed content will not be written to.\n//\n//   from:: ?number\n//   The child node index to start parsing from.\n//\n//   to:: ?number\n//   The child node index to stop parsing at.\n//\n//   topNode:: ?Node\n//   By default, the content is parsed into the schema's default\n//   [top node type](#model.Schema.topNodeType). You can pass this\n//   option to use the type and attributes from a different node\n//   as the top container.\n//\n//   topMatch:: ?ContentMatch\n//   Provide the starting content match that content parsed into the\n//   top node is matched against.\n//\n//   context:: ?ResolvedPos\n//   A set of additional nodes to count as\n//   [context](#model.ParseRule.context) when parsing, above the\n//   given [top node](#model.ParseOptions.topNode).\n\n// ParseRule:: interface\n// A value that describes how to parse a given DOM node or inline\n// style as a ProseMirror node or mark.\n//\n//   tag:: ?string\n//   A CSS selector describing the kind of DOM elements to match. A\n//   single rule should have _either_ a `tag` or a `style` property.\n//\n//   namespace:: ?string\n//   The namespace to match. This should be used with `tag`.\n//   Nodes are only matched when the namespace matches or this property\n//   is null.\n//\n//   style:: ?string\n//   A CSS property name to match. When given, this rule matches\n//   inline styles that list that property. May also have the form\n//   `\"property=value\"`, in which case the rule only matches if the\n//   propery's value exactly matches the given value. (For more\n//   complicated filters, use [`getAttrs`](#model.ParseRule.getAttrs)\n//   and return false to indicate that the match failed.)\n//\n//   priority:: ?number\n//   Can be used to change the order in which the parse rules in a\n//   schema are tried. Those with higher priority come first. Rules\n//   without a priority are counted as having priority 50. This\n//   property is only meaningful in a schema—when directly\n//   constructing a parser, the order of the rule array is used.\n//\n//   context:: ?string\n//   When given, restricts this rule to only match when the current\n//   context—the parent nodes into which the content is being\n//   parsed—matches this expression. Should contain one or more node\n//   names or node group names followed by single or double slashes.\n//   For example `\"paragraph/\"` means the rule only matches when the\n//   parent node is a paragraph, `\"blockquote/paragraph/\"` restricts\n//   it to be in a paragraph that is inside a blockquote, and\n//   `\"section//\"` matches any position inside a section—a double\n//   slash matches any sequence of ancestor nodes. To allow multiple\n//   different contexts, they can be separated by a pipe (`|`)\n//   character, as in `\"blockquote/|list_item/\"`.\n//\n//   node:: ?string\n//   The name of the node type to create when this rule matches. Only\n//   valid for rules with a `tag` property, not for style rules. Each\n//   rule should have one of a `node`, `mark`, or `ignore` property\n//   (except when it appears in a [node](#model.NodeSpec.parseDOM) or\n//   [mark spec](#model.MarkSpec.parseDOM), in which case the `node`\n//   or `mark` property will be derived from its position).\n//\n//   mark:: ?string\n//   The name of the mark type to wrap the matched content in.\n//\n//   ignore:: ?bool\n//   When true, ignore content that matches this rule.\n//\n//   closeParent:: ?bool\n//   When true, finding an element that matches this rule will close\n//   the current node.\n//\n//   skip:: ?bool\n//   When true, ignore the node that matches this rule, but do parse\n//   its content.\n//\n//   attrs:: ?Object\n//   Attributes for the node or mark created by this rule. When\n//   `getAttrs` is provided, it takes precedence.\n//\n//   getAttrs:: ?(union<dom.Node, string>) → ?union<Object, false>\n//   A function used to compute the attributes for the node or mark\n//   created by this rule. Can also be used to describe further\n//   conditions the DOM element or style must match. When it returns\n//   `false`, the rule won't match. When it returns null or undefined,\n//   that is interpreted as an empty/default set of attributes.\n//\n//   Called with a DOM Element for `tag` rules, and with a string (the\n//   style's value) for `style` rules.\n//\n//   contentElement:: ?union<string, (dom.Node) → dom.Node>\n//   For `tag` rules that produce non-leaf nodes or marks, by default\n//   the content of the DOM element is parsed as content of the mark\n//   or node. If the child nodes are in a descendent node, this may be\n//   a CSS selector string that the parser must use to find the actual\n//   content element, or a function that returns the actual content\n//   element to the parser.\n//\n//   getContent:: ?(dom.Node, schema: Schema) → Fragment\n//   Can be used to override the content of a matched node. When\n//   present, instead of parsing the node's child nodes, the result of\n//   this function is used.\n//\n//   preserveWhitespace:: ?union<bool, \"full\">\n//   Controls whether whitespace should be preserved when parsing the\n//   content inside the matched element. `false` means whitespace may\n//   be collapsed, `true` means that whitespace should be preserved\n//   but newlines normalized to spaces, and `\"full\"` means that\n//   newlines should also be preserved.\n\n// ::- A DOM parser represents a strategy for parsing DOM content into\n// a ProseMirror document conforming to a given schema. Its behavior\n// is defined by an array of [rules](#model.ParseRule).\nexport class DOMParser {\n  // :: (Schema, [ParseRule])\n  // Create a parser that targets the given schema, using the given\n  // parsing rules.\n  constructor(schema, rules) {\n    // :: Schema\n    // The schema into which the parser parses.\n    this.schema = schema\n    // :: [ParseRule]\n    // The set of [parse rules](#model.ParseRule) that the parser\n    // uses, in order of precedence.\n    this.rules = rules\n    this.tags = []\n    this.styles = []\n\n    rules.forEach(rule => {\n      if (rule.tag) this.tags.push(rule)\n      else if (rule.style) this.styles.push(rule)\n    })\n\n    // Only normalize list elements when lists in the schema can't directly contain themselves\n    this.normalizeLists = !this.tags.some(r => {\n      if (!/^(ul|ol)\\b/.test(r.tag) || !r.node) return false\n      let node = schema.nodes[r.node]\n      return node.contentMatch.matchType(node)\n    })\n  }\n\n  // :: (dom.Node, ?ParseOptions) → Node\n  // Parse a document from the content of a DOM node.\n  parse(dom, options = {}) {\n    let context = new ParseContext(this, options, false)\n    context.addAll(dom, null, options.from, options.to)\n    return context.finish()\n  }\n\n  // :: (dom.Node, ?ParseOptions) → Slice\n  // Parses the content of the given DOM node, like\n  // [`parse`](#model.DOMParser.parse), and takes the same set of\n  // options. But unlike that method, which produces a whole node,\n  // this one returns a slice that is open at the sides, meaning that\n  // the schema constraints aren't applied to the start of nodes to\n  // the left of the input and the end of nodes at the end.\n  parseSlice(dom, options = {}) {\n    let context = new ParseContext(this, options, true)\n    context.addAll(dom, null, options.from, options.to)\n    return Slice.maxOpen(context.finish())\n  }\n\n  matchTag(dom, context) {\n    for (let i = 0; i < this.tags.length; i++) {\n      let rule = this.tags[i]\n      if (matches(dom, rule.tag) &&\n          (rule.namespace === undefined || dom.namespaceURI == rule.namespace) &&\n          (!rule.context || context.matchesContext(rule.context))) {\n        if (rule.getAttrs) {\n          let result = rule.getAttrs(dom)\n          if (result === false) continue\n          rule.attrs = result\n        }\n        return rule\n      }\n    }\n  }\n\n  matchStyle(prop, value, context) {\n    for (let i = 0; i < this.styles.length; i++) {\n      let rule = this.styles[i]\n      if (rule.style.indexOf(prop) != 0 ||\n          rule.context && !context.matchesContext(rule.context) ||\n          // Test that the style string either precisely matches the prop,\n          // or has an '=' sign after the prop, followed by the given\n          // value.\n          rule.style.length > prop.length &&\n          (rule.style.charCodeAt(prop.length) != 61 || rule.style.slice(prop.length + 1) != value))\n        continue\n      if (rule.getAttrs) {\n        let result = rule.getAttrs(value)\n        if (result === false) continue\n        rule.attrs = result\n      }\n      return rule\n    }\n  }\n\n  // : (Schema) → [ParseRule]\n  static schemaRules(schema) {\n    let result = []\n    function insert(rule) {\n      let priority = rule.priority == null ? 50 : rule.priority, i = 0\n      for (; i < result.length; i++) {\n        let next = result[i], nextPriority = next.priority == null ? 50 : next.priority\n        if (nextPriority < priority) break\n      }\n      result.splice(i, 0, rule)\n    }\n\n    for (let name in schema.marks) {\n      let rules = schema.marks[name].spec.parseDOM\n      if (rules) rules.forEach(rule => {\n        insert(rule = copy(rule))\n        rule.mark = name\n      })\n    }\n    for (let name in schema.nodes) {\n      let rules = schema.nodes[name].spec.parseDOM\n      if (rules) rules.forEach(rule => {\n        insert(rule = copy(rule))\n        rule.node = name\n      })\n    }\n    return result\n  }\n\n  // :: (Schema) → DOMParser\n  // Construct a DOM parser using the parsing rules listed in a\n  // schema's [node specs](#model.NodeSpec.parseDOM), reordered by\n  // [priority](#model.ParseRule.priority).\n  static fromSchema(schema) {\n    return schema.cached.domParser ||\n      (schema.cached.domParser = new DOMParser(schema, DOMParser.schemaRules(schema)))\n  }\n}\n\n// : Object<bool> The block-level tags in HTML5\nconst blockTags = {\n  address: true, article: true, aside: true, blockquote: true, canvas: true,\n  dd: true, div: true, dl: true, fieldset: true, figcaption: true, figure: true,\n  footer: true, form: true, h1: true, h2: true, h3: true, h4: true, h5: true,\n  h6: true, header: true, hgroup: true, hr: true, li: true, noscript: true, ol: true,\n  output: true, p: true, pre: true, section: true, table: true, tfoot: true, ul: true\n}\n\n// : Object<bool> The tags that we normally ignore.\nconst ignoreTags = {\n  head: true, noscript: true, object: true, script: true, style: true, title: true\n}\n\n// : Object<bool> List tags.\nconst listTags = {ol: true, ul: true}\n\n// Using a bitfield for node context options\nconst OPT_PRESERVE_WS = 1, OPT_PRESERVE_WS_FULL = 2, OPT_OPEN_LEFT = 4\n\nfunction wsOptionsFor(preserveWhitespace) {\n  return (preserveWhitespace ? OPT_PRESERVE_WS : 0) | (preserveWhitespace === \"full\" ? OPT_PRESERVE_WS_FULL : 0)\n}\n\nclass NodeContext {\n  constructor(type, attrs, marks, pendingMarks, solid, match, options) {\n    this.type = type\n    this.attrs = attrs\n    this.solid = solid\n    this.match = match || (options & OPT_OPEN_LEFT ? null : type.contentMatch)\n    this.options = options\n    this.content = []\n    // Marks applied to this node itself\n    this.marks = marks\n    // Marks applied to its children\n    this.activeMarks = Mark.none\n    // Marks that can't apply here, but will be used in children if possible\n    this.pendingMarks = pendingMarks\n  }\n\n  findWrapping(node) {\n    if (!this.match) {\n      if (!this.type) return []\n      let fill = this.type.contentMatch.fillBefore(Fragment.from(node))\n      if (fill) {\n        this.match = this.type.contentMatch.matchFragment(fill)\n      } else {\n        let start = this.type.contentMatch, wrap\n        if (wrap = start.findWrapping(node.type)) {\n          this.match = start\n          return wrap\n        } else {\n          return null\n        }\n      }\n    }\n    return this.match.findWrapping(node.type)\n  }\n\n  finish(openEnd) {\n    if (!(this.options & OPT_PRESERVE_WS)) { // Strip trailing whitespace\n      let last = this.content[this.content.length - 1], m\n      if (last && last.isText && (m = /[ \\t\\r\\n\\u000c]+$/.exec(last.text))) {\n        if (last.text.length == m[0].length) this.content.pop()\n        else this.content[this.content.length - 1] = last.withText(last.text.slice(0, last.text.length - m[0].length))\n      }\n    }\n    let content = Fragment.from(this.content)\n    if (!openEnd && this.match)\n      content = content.append(this.match.fillBefore(Fragment.empty, true))\n    return this.type ? this.type.create(this.attrs, content, this.marks) : content\n  }\n\n  applyPending(nextType) {\n    for (let i = 0, pending = this.pendingMarks; i < pending.length; i++) {\n      let mark = pending[i]\n      if ((this.type ? this.type.allowsMarkType(mark.type) : markMayApply(mark.type, nextType)) &&\n          !mark.isInSet(this.activeMarks)) {\n        this.activeMarks = mark.addToSet(this.activeMarks)\n        this.pendingMarks = mark.removeFromSet(this.pendingMarks)\n      }\n    }\n  }\n}\n\nclass ParseContext {\n  // : (DOMParser, Object)\n  constructor(parser, options, open) {\n    // : DOMParser The parser we are using.\n    this.parser = parser\n    // : Object The options passed to this parse.\n    this.options = options\n    this.isOpen = open\n    let topNode = options.topNode, topContext\n    let topOptions = wsOptionsFor(options.preserveWhitespace) | (open ? OPT_OPEN_LEFT : 0)\n    if (topNode)\n      topContext = new NodeContext(topNode.type, topNode.attrs, Mark.none, Mark.none, true,\n                                   options.topMatch || topNode.type.contentMatch, topOptions)\n    else if (open)\n      topContext = new NodeContext(null, null, Mark.none, Mark.none, true, null, topOptions)\n    else\n      topContext = new NodeContext(parser.schema.topNodeType, null, Mark.none, Mark.none, true, null, topOptions)\n    this.nodes = [topContext]\n    // : [Mark] The current set of marks\n    this.open = 0\n    this.find = options.findPositions\n    this.needsBlock = false\n  }\n\n  get top() {\n    return this.nodes[this.open]\n  }\n\n  // : (dom.Node)\n  // Add a DOM node to the content. Text is inserted as text node,\n  // otherwise, the node is passed to `addElement` or, if it has a\n  // `style` attribute, `addElementWithStyles`.\n  addDOM(dom) {\n    if (dom.nodeType == 3) {\n      this.addTextNode(dom)\n    } else if (dom.nodeType == 1) {\n      let style = dom.getAttribute(\"style\")\n      let marks = style ? this.readStyles(parseStyles(style)) : null, top = this.top\n      if (marks != null) for (let i = 0; i < marks.length; i++) this.addPendingMark(marks[i])\n      this.addElement(dom)\n      if (marks != null) for (let i = 0; i < marks.length; i++) this.removePendingMark(marks[i], top)\n    }\n  }\n\n  addTextNode(dom) {\n    let value = dom.nodeValue\n    let top = this.top\n    if ((top.type ? top.type.inlineContent : top.content.length && top.content[0].isInline) || /[^ \\t\\r\\n\\u000c]/.test(value)) {\n      if (!(top.options & OPT_PRESERVE_WS)) {\n        value = value.replace(/[ \\t\\r\\n\\u000c]+/g, \" \")\n        // If this starts with whitespace, and there is no node before it, or\n        // a hard break, or a text node that ends with whitespace, strip the\n        // leading space.\n        if (/^[ \\t\\r\\n\\u000c]/.test(value) && this.open == this.nodes.length - 1) {\n          let nodeBefore = top.content[top.content.length - 1]\n          let domNodeBefore = dom.previousSibling\n          if (!nodeBefore ||\n              (domNodeBefore && domNodeBefore.nodeName == 'BR') ||\n              (nodeBefore.isText && /[ \\t\\r\\n\\u000c]$/.test(nodeBefore.text)))\n            value = value.slice(1)\n        }\n      } else if (!(top.options & OPT_PRESERVE_WS_FULL)) {\n        value = value.replace(/\\r?\\n|\\r/g, \" \")\n      }\n      if (value) this.insertNode(this.parser.schema.text(value))\n      this.findInText(dom)\n    } else {\n      this.findInside(dom)\n    }\n  }\n\n  // : (dom.Element)\n  // Try to find a handler for the given tag and use that to parse. If\n  // none is found, the element's content nodes are added directly.\n  addElement(dom) {\n    let name = dom.nodeName.toLowerCase()\n    if (listTags.hasOwnProperty(name) && this.parser.normalizeLists) normalizeList(dom)\n    let rule = (this.options.ruleFromNode && this.options.ruleFromNode(dom)) || this.parser.matchTag(dom, this)\n    if (rule ? rule.ignore : ignoreTags.hasOwnProperty(name)) {\n      this.findInside(dom)\n    } else if (!rule || rule.skip || rule.closeParent) {\n      if (rule && rule.closeParent) this.open = Math.max(0, this.open - 1)\n      else if (rule && rule.skip.nodeType) dom = rule.skip\n      let sync, top = this.top, oldNeedsBlock = this.needsBlock\n      if (blockTags.hasOwnProperty(name)) {\n        sync = true\n        if (!top.type) this.needsBlock = true\n      } else if (!dom.firstChild) {\n        this.leafFallback(dom)\n        return\n      }\n      this.addAll(dom)\n      if (sync) this.sync(top)\n      this.needsBlock = oldNeedsBlock\n    } else {\n      this.addElementByRule(dom, rule)\n    }\n  }\n\n  // Called for leaf DOM nodes that would otherwise be ignored\n  leafFallback(dom) {\n    if (dom.nodeName == \"BR\" && this.top.type && this.top.type.inlineContent)\n      this.addTextNode(dom.ownerDocument.createTextNode(\"\\n\"))\n  }\n\n  // Run any style parser associated with the node's styles. Either\n  // return an array of marks, or null to indicate some of the styles\n  // had a rule with `ignore` set.\n  readStyles(styles) {\n    let marks = Mark.none\n    for (let i = 0; i < styles.length; i += 2) {\n      let rule = this.parser.matchStyle(styles[i], styles[i + 1], this)\n      if (!rule) continue\n      if (rule.ignore) return null\n      marks = this.parser.schema.marks[rule.mark].create(rule.attrs).addToSet(marks)\n    }\n    return marks\n  }\n\n  // : (dom.Element, ParseRule) → bool\n  // Look up a handler for the given node. If none are found, return\n  // false. Otherwise, apply it, use its return value to drive the way\n  // the node's content is wrapped, and return true.\n  addElementByRule(dom, rule) {\n    let sync, nodeType, markType, mark\n    if (rule.node) {\n      nodeType = this.parser.schema.nodes[rule.node]\n      if (!nodeType.isLeaf) {\n        sync = this.enter(nodeType, rule.attrs, rule.preserveWhitespace)\n      } else if (!this.insertNode(nodeType.create(rule.attrs))) {\n        this.leafFallback(dom)\n      }\n    } else {\n      markType = this.parser.schema.marks[rule.mark]\n      mark = markType.create(rule.attrs)\n      this.addPendingMark(mark)\n    }\n    let startIn = this.top\n\n    if (nodeType && nodeType.isLeaf) {\n      this.findInside(dom)\n    } else if (rule.getContent) {\n      this.findInside(dom)\n      rule.getContent(dom, this.parser.schema).forEach(node => this.insertNode(node))\n    } else {\n      let contentDOM = rule.contentElement\n      if (typeof contentDOM == \"string\") contentDOM = dom.querySelector(contentDOM)\n      else if (typeof contentDOM == \"function\") contentDOM = contentDOM(dom)\n      if (!contentDOM) contentDOM = dom\n      this.findAround(dom, contentDOM, true)\n      this.addAll(contentDOM, sync)\n    }\n    if (sync) { this.sync(startIn); this.open-- }\n    if (mark) this.removePendingMark(mark, startIn)\n  }\n\n  // : (dom.Node, ?NodeBuilder, ?number, ?number)\n  // Add all child nodes between `startIndex` and `endIndex` (or the\n  // whole node, if not given). If `sync` is passed, use it to\n  // synchronize after every block element.\n  addAll(parent, sync, startIndex, endIndex) {\n    let index = startIndex || 0\n    for (let dom = startIndex ? parent.childNodes[startIndex] : parent.firstChild,\n             end = endIndex == null ? null : parent.childNodes[endIndex];\n         dom != end; dom = dom.nextSibling, ++index) {\n      this.findAtPoint(parent, index)\n      this.addDOM(dom)\n      if (sync && blockTags.hasOwnProperty(dom.nodeName.toLowerCase()))\n        this.sync(sync)\n    }\n    this.findAtPoint(parent, index)\n  }\n\n  // Try to find a way to fit the given node type into the current\n  // context. May add intermediate wrappers and/or leave non-solid\n  // nodes that we're in.\n  findPlace(node) {\n    let route, sync\n    for (let depth = this.open; depth >= 0; depth--) {\n      let cx = this.nodes[depth]\n      let found = cx.findWrapping(node)\n      if (found && (!route || route.length > found.length)) {\n        route = found\n        sync = cx\n        if (!found.length) break\n      }\n      if (cx.solid) break\n    }\n    if (!route) return false\n    this.sync(sync)\n    for (let i = 0; i < route.length; i++)\n      this.enterInner(route[i], null, false)\n    return true\n  }\n\n  // : (Node) → ?Node\n  // Try to insert the given node, adjusting the context when needed.\n  insertNode(node) {\n    if (node.isInline && this.needsBlock && !this.top.type) {\n      let block = this.textblockFromContext()\n      if (block) this.enterInner(block)\n    }\n    if (this.findPlace(node)) {\n      this.closeExtra()\n      let top = this.top\n      top.applyPending(node.type)\n      if (top.match) top.match = top.match.matchType(node.type)\n      let marks = top.activeMarks\n      for (let i = 0; i < node.marks.length; i++)\n        if (!top.type || top.type.allowsMarkType(node.marks[i].type))\n          marks = node.marks[i].addToSet(marks)\n      top.content.push(node.mark(marks))\n      return true\n    }\n    return false\n  }\n\n  // : (NodeType, ?Object) → bool\n  // Try to start a node of the given type, adjusting the context when\n  // necessary.\n  enter(type, attrs, preserveWS) {\n    let ok = this.findPlace(type.create(attrs))\n    if (ok) this.enterInner(type, attrs, true, preserveWS)\n    return ok\n  }\n\n  // Open a node of the given type\n  enterInner(type, attrs, solid, preserveWS) {\n    this.closeExtra()\n    let top = this.top\n    top.applyPending(type)\n    top.match = top.match && top.match.matchType(type, attrs)\n    let options = preserveWS == null ? top.options & ~OPT_OPEN_LEFT : wsOptionsFor(preserveWS)\n    if ((top.options & OPT_OPEN_LEFT) && top.content.length == 0) options |= OPT_OPEN_LEFT\n    this.nodes.push(new NodeContext(type, attrs, top.activeMarks, top.pendingMarks, solid, null, options))\n    this.open++\n  }\n\n  // Make sure all nodes above this.open are finished and added to\n  // their parents\n  closeExtra(openEnd) {\n    let i = this.nodes.length - 1\n    if (i > this.open) {\n      for (; i > this.open; i--) this.nodes[i - 1].content.push(this.nodes[i].finish(openEnd))\n      this.nodes.length = this.open + 1\n    }\n  }\n\n  finish() {\n    this.open = 0\n    this.closeExtra(this.isOpen)\n    return this.nodes[0].finish(this.isOpen || this.options.topOpen)\n  }\n\n  sync(to) {\n    for (let i = this.open; i >= 0; i--) if (this.nodes[i] == to) {\n      this.open = i\n      return\n    }\n  }\n\n  get currentPos() {\n    this.closeExtra()\n    let pos = 0\n    for (let i = this.open; i >= 0; i--) {\n      let content = this.nodes[i].content\n      for (let j = content.length - 1; j >= 0; j--)\n        pos += content[j].nodeSize\n      if (i) pos++\n    }\n    return pos\n  }\n\n  findAtPoint(parent, offset) {\n    if (this.find) for (let i = 0; i < this.find.length; i++) {\n      if (this.find[i].node == parent && this.find[i].offset == offset)\n        this.find[i].pos = this.currentPos\n    }\n  }\n\n  findInside(parent) {\n    if (this.find) for (let i = 0; i < this.find.length; i++) {\n      if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node))\n        this.find[i].pos = this.currentPos\n    }\n  }\n\n  findAround(parent, content, before) {\n    if (parent != content && this.find) for (let i = 0; i < this.find.length; i++) {\n      if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node)) {\n        let pos = content.compareDocumentPosition(this.find[i].node)\n        if (pos & (before ? 2 : 4))\n          this.find[i].pos = this.currentPos\n      }\n    }\n  }\n\n  findInText(textNode) {\n    if (this.find) for (let i = 0; i < this.find.length; i++) {\n      if (this.find[i].node == textNode)\n        this.find[i].pos = this.currentPos - (textNode.nodeValue.length - this.find[i].offset)\n    }\n  }\n\n  // : (string) → bool\n  // Determines whether the given [context\n  // string](#ParseRule.context) matches this context.\n  matchesContext(context) {\n    if (context.indexOf(\"|\") > -1)\n      return context.split(/\\s*\\|\\s*/).some(this.matchesContext, this)\n\n    let parts = context.split(\"/\")\n    let option = this.options.context\n    let useRoot = !this.isOpen && (!option || option.parent.type == this.nodes[0].type)\n    let minDepth = -(option ? option.depth + 1 : 0) + (useRoot ? 0 : 1)\n    let match = (i, depth) => {\n      for (; i >= 0; i--) {\n        let part = parts[i]\n        if (part == \"\") {\n          if (i == parts.length - 1 || i == 0) continue\n          for (; depth >= minDepth; depth--)\n            if (match(i - 1, depth)) return true\n          return false\n        } else {\n          let next = depth > 0 || (depth == 0 && useRoot) ? this.nodes[depth].type\n              : option && depth >= minDepth ? option.node(depth - minDepth).type\n              : null\n          if (!next || (next.name != part && next.groups.indexOf(part) == -1))\n            return false\n          depth--\n        }\n      }\n      return true\n    }\n    return match(parts.length - 1, this.open)\n  }\n\n  textblockFromContext() {\n    let $context = this.options.context\n    if ($context) for (let d = $context.depth; d >= 0; d--) {\n      let deflt = $context.node(d).contentMatchAt($context.indexAfter(d)).defaultType\n      if (deflt && deflt.isTextblock && deflt.defaultAttrs) return deflt\n    }\n    for (let name in this.parser.schema.nodes) {\n      let type = this.parser.schema.nodes[name]\n      if (type.isTextblock && type.defaultAttrs) return type\n    }\n  }\n\n  addPendingMark(mark) {\n    this.top.pendingMarks = mark.addToSet(this.top.pendingMarks)\n  }\n\n  removePendingMark(mark, upto) {\n    for (let depth = this.open; depth >= 0; depth--) {\n      let level = this.nodes[depth]\n      let found = level.pendingMarks.lastIndexOf(mark)\n      if (found > -1) level.pendingMarks = mark.removeFromSet(level.pendingMarks)\n      else level.activeMarks = mark.removeFromSet(level.activeMarks)\n      if (level == upto) break\n    }\n  }\n}\n\n// Kludge to work around directly nested list nodes produced by some\n// tools and allowed by browsers to mean that the nested list is\n// actually part of the list item above it.\nfunction normalizeList(dom) {\n  for (let child = dom.firstChild, prevItem = null; child; child = child.nextSibling) {\n    let name = child.nodeType == 1 ? child.nodeName.toLowerCase() : null\n    if (name && listTags.hasOwnProperty(name) && prevItem) {\n      prevItem.appendChild(child)\n      child = prevItem\n    } else if (name == \"li\") {\n      prevItem = child\n    } else if (name) {\n      prevItem = null\n    }\n  }\n}\n\n// Apply a CSS selector.\nfunction matches(dom, selector) {\n  return (dom.matches || dom.msMatchesSelector || dom.webkitMatchesSelector || dom.mozMatchesSelector).call(dom, selector)\n}\n\n// : (string) → [string]\n// Tokenize a style attribute into property/value pairs.\nfunction parseStyles(style) {\n  let re = /\\s*([\\w-]+)\\s*:\\s*([^;]+)/g, m, result = []\n  while (m = re.exec(style)) result.push(m[1], m[2].trim())\n  return result\n}\n\nfunction copy(obj) {\n  let copy = {}\n  for (let prop in obj) copy[prop] = obj[prop]\n  return copy\n}\n\n// Used when finding a mark at the top level of a fragment parse.\n// Checks whether it would be reasonable to apply a given mark type to\n// a given node, by looking at the way the mark occurs in the schema.\nfunction markMayApply(markType, nodeType) {\n  let nodes = nodeType.schema.nodes\n  for (let name in nodes) {\n    let parent = nodes[name]\n    if (!parent.allowsMarkType(markType)) continue\n    let seen = [], scan = match => {\n      seen.push(match)\n      for (let i = 0; i < match.edgeCount; i++) {\n        let {type, next} = match.edge(i)\n        if (type == nodeType) return true\n        if (seen.indexOf(next) < 0 && scan(next)) return true\n      }\n    }\n    if (scan(parent.contentMatch)) return true\n  }\n}\n","// DOMOutputSpec:: interface\n// A description of a DOM structure. Can be either a string, which is\n// interpreted as a text node, a DOM node, which is interpreted as\n// itself, or an array.\n//\n// An array describes a DOM element. The first value in the array\n// should be a string—the name of the DOM element, optionally prefixed\n// by a namespace URL and a space. If the second element is plain\n// object, it is interpreted as a set of attributes for the element.\n// Any elements after that (including the 2nd if it's not an attribute\n// object) are interpreted as children of the DOM elements, and must\n// either be valid `DOMOutputSpec` values, or the number zero.\n//\n// The number zero (pronounced “hole”) is used to indicate the place\n// where a node's child nodes should be inserted. If it occurs in an\n// output spec, it should be the only child element in its parent\n// node.\n\n// ::- A DOM serializer knows how to convert ProseMirror nodes and\n// marks of various types to DOM nodes.\nexport class DOMSerializer {\n  // :: (Object<(node: Node) → DOMOutputSpec>, Object<?(mark: Mark, inline: bool) → DOMOutputSpec>)\n  // Create a serializer. `nodes` should map node names to functions\n  // that take a node and return a description of the corresponding\n  // DOM. `marks` does the same for mark names, but also gets an\n  // argument that tells it whether the mark's content is block or\n  // inline content (for typical use, it'll always be inline). A mark\n  // serializer may be `null` to indicate that marks of that type\n  // should not be serialized.\n  constructor(nodes, marks) {\n    // :: Object<(node: Node) → DOMOutputSpec>\n    // The node serialization functions.\n    this.nodes = nodes || {}\n    // :: Object<?(mark: Mark, inline: bool) → DOMOutputSpec>\n    // The mark serialization functions.\n    this.marks = marks || {}\n  }\n\n  // :: (Fragment, ?Object) → dom.DocumentFragment\n  // Serialize the content of this fragment to a DOM fragment. When\n  // not in the browser, the `document` option, containing a DOM\n  // document, should be passed so that the serializer can create\n  // nodes.\n  serializeFragment(fragment, options = {}, target) {\n    if (!target) target = doc(options).createDocumentFragment()\n\n    let top = target, active = null\n    fragment.forEach(node => {\n      if (active || node.marks.length) {\n        if (!active) active = []\n        let keep = 0, rendered = 0\n        while (keep < active.length && rendered < node.marks.length) {\n          let next = node.marks[rendered]\n          if (!this.marks[next.type.name]) { rendered++; continue }\n          if (!next.eq(active[keep]) || next.type.spec.spanning === false) break\n          keep += 2; rendered++\n        }\n        while (keep < active.length) {\n          top = active.pop()\n          active.pop()\n        }\n        while (rendered < node.marks.length) {\n          let add = node.marks[rendered++]\n          let markDOM = this.serializeMark(add, node.isInline, options)\n          if (markDOM) {\n            active.push(add, top)\n            top.appendChild(markDOM.dom)\n            top = markDOM.contentDOM || markDOM.dom\n          }\n        }\n      }\n      top.appendChild(this.serializeNode(node, options))\n    })\n\n    return target\n  }\n\n  // :: (Node, ?Object) → dom.Node\n  // Serialize this node to a DOM node. This can be useful when you\n  // need to serialize a part of a document, as opposed to the whole\n  // document. To serialize a whole document, use\n  // [`serializeFragment`](#model.DOMSerializer.serializeFragment) on\n  // its [content](#model.Node.content).\n  serializeNode(node, options = {}) {\n    let {dom, contentDOM} =\n        DOMSerializer.renderSpec(doc(options), this.nodes[node.type.name](node))\n    if (contentDOM) {\n      if (node.isLeaf)\n        throw new RangeError(\"Content hole not allowed in a leaf node spec\")\n      if (options.onContent)\n        options.onContent(node, contentDOM, options)\n      else\n        this.serializeFragment(node.content, options, contentDOM)\n    }\n    return dom\n  }\n\n  serializeNodeAndMarks(node, options = {}) {\n    let dom = this.serializeNode(node, options)\n    for (let i = node.marks.length - 1; i >= 0; i--) {\n      let wrap = this.serializeMark(node.marks[i], node.isInline, options)\n      if (wrap) {\n        ;(wrap.contentDOM || wrap.dom).appendChild(dom)\n        dom = wrap.dom\n      }\n    }\n    return dom\n  }\n\n  serializeMark(mark, inline, options = {}) {\n    let toDOM = this.marks[mark.type.name]\n    return toDOM && DOMSerializer.renderSpec(doc(options), toDOM(mark, inline))\n  }\n\n  // :: (dom.Document, DOMOutputSpec) → {dom: dom.Node, contentDOM: ?dom.Node}\n  // Render an [output spec](#model.DOMOutputSpec) to a DOM node. If\n  // the spec has a hole (zero) in it, `contentDOM` will point at the\n  // node with the hole.\n  static renderSpec(doc, structure, xmlNS = null) {\n    if (typeof structure == \"string\")\n      return {dom: doc.createTextNode(structure)}\n    if (structure.nodeType != null)\n      return {dom: structure}\n    let tagName = structure[0], space = tagName.indexOf(\" \")\n    if (space > 0) {\n      xmlNS = tagName.slice(0, space)\n      tagName = tagName.slice(space + 1)\n    }\n    let contentDOM = null, dom = xmlNS ? doc.createElementNS(xmlNS, tagName) : doc.createElement(tagName)\n    let attrs = structure[1], start = 1\n    if (attrs && typeof attrs == \"object\" && attrs.nodeType == null && !Array.isArray(attrs)) {\n      start = 2\n      for (let name in attrs) if (attrs[name] != null) {\n        let space = name.indexOf(\" \")\n        if (space > 0) dom.setAttributeNS(name.slice(0, space), name.slice(space + 1), attrs[name])\n        else dom.setAttribute(name, attrs[name])\n      }\n    }\n    for (let i = start; i < structure.length; i++) {\n      let child = structure[i]\n      if (child === 0) {\n        if (i < structure.length - 1 || i > start)\n          throw new RangeError(\"Content hole must be the only child of its parent node\")\n        return {dom, contentDOM: dom}\n      } else {\n        let {dom: inner, contentDOM: innerContent} = DOMSerializer.renderSpec(doc, child, xmlNS)\n        dom.appendChild(inner)\n        if (innerContent) {\n          if (contentDOM) throw new RangeError(\"Multiple content holes\")\n          contentDOM = innerContent\n        }\n      }\n    }\n    return {dom, contentDOM}\n  }\n\n  // :: (Schema) → DOMSerializer\n  // Build a serializer using the [`toDOM`](#model.NodeSpec.toDOM)\n  // properties in a schema's node and mark specs.\n  static fromSchema(schema) {\n    return schema.cached.domSerializer ||\n      (schema.cached.domSerializer = new DOMSerializer(this.nodesFromSchema(schema), this.marksFromSchema(schema)))\n  }\n\n  // : (Schema) → Object<(node: Node) → DOMOutputSpec>\n  // Gather the serializers in a schema's node specs into an object.\n  // This can be useful as a base to build a custom serializer from.\n  static nodesFromSchema(schema) {\n    let result = gatherToDOM(schema.nodes)\n    if (!result.text) result.text = node => node.text\n    return result\n  }\n\n  // : (Schema) → Object<(mark: Mark) → DOMOutputSpec>\n  // Gather the serializers in a schema's mark specs into an object.\n  static marksFromSchema(schema) {\n    return gatherToDOM(schema.marks)\n  }\n}\n\nfunction gatherToDOM(obj) {\n  let result = {}\n  for (let name in obj) {\n    let toDOM = obj[name].spec.toDOM\n    if (toDOM) result[name] = toDOM\n  }\n  return result\n}\n\nfunction doc(options) {\n  // declare global: window\n  return options.document || window.document\n}\n","import {Plugin} from \"prosemirror-state\"\nimport {dropPoint} from \"prosemirror-transform\"\n\n// :: (options: ?Object) → Plugin\n// Create a plugin that, when added to a ProseMirror instance,\n// causes a decoration to show up at the drop position when something\n// is dragged over the editor.\n//\n//   options::- These options are supported:\n//\n//     color:: ?string\n//     The color of the cursor. Defaults to `black`.\n//\n//     width:: ?number\n//     The precise width of the cursor in pixels. Defaults to 1.\n//\n//     class:: ?string\n//     A CSS class name to add to the cursor element.\nexport function dropCursor(options = {}) {\n  return new Plugin({\n    view(editorView) { return new DropCursorView(editorView, options) }\n  })\n}\n\nclass DropCursorView {\n  constructor(editorView, options) {\n    this.editorView = editorView\n    this.width = options.width || 1\n    this.color = options.color || \"black\"\n    this.class = options.class\n    this.cursorPos = null\n    this.element = null\n    this.timeout = null\n\n    this.handlers = [\"dragover\", \"dragend\", \"drop\", \"dragleave\"].map(name => {\n      let handler = e => this[name](e)\n      editorView.dom.addEventListener(name, handler)\n      return {name, handler}\n    })\n  }\n\n  destroy() {\n    this.handlers.forEach(({name, handler}) => this.editorView.dom.removeEventListener(name, handler))\n  }\n\n  update(editorView, prevState) {\n    if (this.cursorPos != null && prevState.doc != editorView.state.doc) this.updateOverlay()\n  }\n\n  setCursor(pos) {\n    if (pos == this.cursorPos) return\n    this.cursorPos = pos\n    if (pos == null) {\n      this.element.parentNode.removeChild(this.element)\n      this.element = null\n    } else {\n      this.updateOverlay()\n    }\n  }\n\n  updateOverlay() {\n    let $pos = this.editorView.state.doc.resolve(this.cursorPos), rect\n    if (!$pos.parent.inlineContent) {\n      let before = $pos.nodeBefore, after = $pos.nodeAfter\n      if (before || after) {\n        let nodeRect = this.editorView.nodeDOM(this.cursorPos - (before ?  before.nodeSize : 0)).getBoundingClientRect()\n        let top = before ? nodeRect.bottom : nodeRect.top\n        if (before && after)\n          top = (top + this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top) / 2\n        rect = {left: nodeRect.left, right: nodeRect.right, top: top - this.width / 2, bottom: top + this.width / 2}\n      }\n    }\n    if (!rect) {\n      let coords = this.editorView.coordsAtPos(this.cursorPos)\n      rect = {left: coords.left - this.width / 2, right: coords.left + this.width / 2, top: coords.top, bottom: coords.bottom}\n    }\n\n    let parent = this.editorView.dom.offsetParent\n    if (!this.element) {\n      this.element = parent.appendChild(document.createElement(\"div\"))\n      if (this.class) this.element.className = this.class\n      this.element.style.cssText = \"position: absolute; z-index: 50; pointer-events: none; background-color: \" + this.color\n    }\n    let parentRect = !parent || parent == document.body && getComputedStyle(parent).position == \"static\"\n        ? {left: -pageXOffset, top: -pageYOffset} : parent.getBoundingClientRect()\n    this.element.style.left = (rect.left - parentRect.left) + \"px\"\n    this.element.style.top = (rect.top - parentRect.top) + \"px\"\n    this.element.style.width = (rect.right - rect.left) + \"px\"\n    this.element.style.height = (rect.bottom - rect.top) + \"px\"\n  }\n\n  scheduleRemoval(timeout) {\n    clearTimeout(this.timeout)\n    this.timeout = setTimeout(() => this.setCursor(null), timeout)\n  }\n\n  dragover(event) {\n    if (!this.editorView.editable) return\n    let pos = this.editorView.posAtCoords({left: event.clientX, top: event.clientY})\n    if (pos) {\n      let target = pos.pos\n      if (this.editorView.dragging && this.editorView.dragging.slice) {\n        target = dropPoint(this.editorView.state.doc, target, this.editorView.dragging.slice)\n        if (target == null) target = pos.pos\n      }\n      this.setCursor(target)\n      this.scheduleRemoval(5000)\n    }\n  }\n\n  dragend() {\n    this.scheduleRemoval(20)\n  }\n\n  drop() {\n    this.scheduleRemoval(20)\n  }\n\n  dragleave(event) {\n    if (event.target == this.editorView.dom || !this.editorView.dom.contains(event.relatedTarget))\n      this.setCursor(null)\n  }\n}\n","import {Selection, NodeSelection} from \"prosemirror-state\"\nimport {Slice} from \"prosemirror-model\"\n\n// ::- Gap cursor selections are represented using this class. Its\n// `$anchor` and `$head` properties both point at the cursor position.\nexport class GapCursor extends Selection {\n  // : (ResolvedPos)\n  constructor($pos) {\n    super($pos, $pos)\n  }\n\n  map(doc, mapping) {\n    let $pos = doc.resolve(mapping.map(this.head))\n    return GapCursor.valid($pos) ? new GapCursor($pos) : Selection.near($pos)\n  }\n\n  content() { return Slice.empty }\n\n  eq(other) {\n    return other instanceof GapCursor && other.head == this.head\n  }\n\n  toJSON() {\n    return {type: \"gapcursor\", pos: this.head}\n  }\n\n  static fromJSON(doc, json) {\n    if (typeof json.pos != \"number\") throw new RangeError(\"Invalid input for GapCursor.fromJSON\")\n    return new GapCursor(doc.resolve(json.pos))\n  }\n\n  getBookmark() { return new GapBookmark(this.anchor) }\n\n  static valid($pos) {\n    let parent = $pos.parent\n    if (parent.isTextblock || !closedBefore($pos) || !closedAfter($pos)) return false\n    let override = parent.type.spec.allowGapCursor\n    if (override != null) return override\n    let deflt = parent.contentMatchAt($pos.index()).defaultType\n    return deflt && deflt.isTextblock\n  }\n\n  static findFrom($pos, dir, mustMove) {\n    search: for (;;) {\n      if (!mustMove && GapCursor.valid($pos)) return $pos\n      let pos = $pos.pos, next = null\n      // Scan up from this position\n      for (let d = $pos.depth;; d--) {\n        let parent = $pos.node(d)\n        if (dir > 0 ? $pos.indexAfter(d) < parent.childCount : $pos.index(d) > 0) {\n          next = parent.child(dir > 0 ? $pos.indexAfter(d) : $pos.index(d) - 1)\n          break\n        } else if (d == 0) {\n          return null\n        }\n        pos += dir\n        let $cur = $pos.doc.resolve(pos)\n        if (GapCursor.valid($cur)) return $cur\n      }\n\n      // And then down into the next node\n      for (;;) {\n        let inside = dir > 0 ? next.firstChild : next.lastChild\n        if (!inside) {\n          if (next.isAtom && !next.isText && !NodeSelection.isSelectable(next)) {\n            $pos = $pos.doc.resolve(pos + next.nodeSize * dir)\n            mustMove = false\n            continue search\n          }\n          break\n        }\n        next = inside\n        pos += dir\n        let $cur = $pos.doc.resolve(pos)\n        if (GapCursor.valid($cur)) return $cur\n      }\n\n      return null\n    }\n  }\n}\n\nGapCursor.prototype.visible = false\n\nSelection.jsonID(\"gapcursor\", GapCursor)\n\nclass GapBookmark {\n  constructor(pos) {\n    this.pos = pos\n  }\n  map(mapping) {\n    return new GapBookmark(mapping.map(this.pos))\n  }\n  resolve(doc) {\n    let $pos = doc.resolve(this.pos)\n    return GapCursor.valid($pos) ? new GapCursor($pos) : Selection.near($pos)\n  }\n}\n\nfunction closedBefore($pos) {\n  for (let d = $pos.depth; d >= 0; d--) {\n    let index = $pos.index(d)\n    // At the start of this parent, look at next one\n    if (index == 0) continue\n    // See if the node before (or its first ancestor) is closed\n    for (let before = $pos.node(d).child(index - 1);; before = before.lastChild) {\n      if ((before.childCount == 0 && !before.inlineContent) || before.isAtom || before.type.spec.isolating) return true\n      if (before.inlineContent) return false\n    }\n  }\n  // Hit start of document\n  return true\n}\n\nfunction closedAfter($pos) {\n  for (let d = $pos.depth; d >= 0; d--) {\n    let index = $pos.indexAfter(d), parent = $pos.node(d)\n    if (index == parent.childCount) continue\n    for (let after = parent.child(index);; after = after.firstChild) {\n      if ((after.childCount == 0 && !after.inlineContent) || after.isAtom || after.type.spec.isolating) return true\n      if (after.inlineContent) return false\n    }\n  }\n  return true\n}\n","// This file defines a plugin that handles the drawing of cell\n// selections and the basic user interactions for creating and working\n// with such selections. It also makes sure that, after each\n// transaction, the shapes of tables are normalized to be rectangular\n// and not contain overlapping cells.\n\nimport {Plugin} from \"prosemirror-state\"\n\nimport {handleTripleClick, handleKeyDown, handlePaste, handleMouseDown} from \"./input\"\nimport {key as tableEditingKey} from \"./util\"\nimport {drawCellSelection, normalizeSelection} from \"./cellselection\"\nimport {fixTables, fixTablesKey} from \"./fixtables\"\n\n// :: () → Plugin\n//\n// Creates a [plugin](http://prosemirror.net/docs/ref/#state.Plugin)\n// that, when added to an editor, enables cell-selection, handles\n// cell-based copy/paste, and makes sure tables stay well-formed (each\n// row has the same width, and cells don't overlap).\n//\n// You should probably put this plugin near the end of your array of\n// plugins, since it handles mouse and arrow key events in tables\n// rather broadly, and other plugins, like the gap cursor or the\n// column-width dragging plugin, might want to get a turn first to\n// perform more specific behavior.\nexport function tableEditing({ allowTableNodeSelection = false } = {}) {\n  return new Plugin({\n    key: tableEditingKey,\n\n    // This piece of state is used to remember when a mouse-drag\n    // cell-selection is happening, so that it can continue even as\n    // transactions (which might move its anchor cell) come in.\n    state: {\n      init() { return null },\n      apply(tr, cur) {\n        let set = tr.getMeta(tableEditingKey)\n        if (set != null) return set == -1 ? null : set\n        if (cur == null || !tr.docChanged) return cur\n        let {deleted, pos} = tr.mapping.mapResult(cur)\n        return deleted ? null : pos\n      }\n    },\n\n    props: {\n      decorations: drawCellSelection,\n\n      handleDOMEvents: {\n        mousedown: handleMouseDown\n      },\n\n      createSelectionBetween(view) {\n        if (tableEditingKey.getState(view.state) != null) return view.state.selection\n      },\n\n      handleTripleClick,\n\n      handleKeyDown,\n\n      handlePaste\n    },\n\n    appendTransaction(_, oldState, state) {\n      return normalizeSelection(state, fixTables(state, oldState), allowTableNodeSelection)\n    }\n  })\n}\n\nexport {fixTables, handlePaste, fixTablesKey}\nexport {cellAround, isInTable, selectionCell, moveCellForward, inSameTable, findCell, colCount, nextCell, setAttr, pointsAtCell, removeColSpan, addColSpan, columnIsHeader} from \"./util\";\nexport {tableNodes, tableNodeTypes} from \"./schema\"\nexport {CellSelection} from \"./cellselection\"\nexport {TableMap} from \"./tablemap\"\nexport {tableEditingKey};\nexport * from \"./commands\"\nexport {columnResizing, key as columnResizingPluginKey} from \"./columnresizing\"\nexport {updateColumns as updateColumnsOnResize, TableView} from \"./tableview\"\nexport {pastedCells as __pastedCells, insertCells as __insertCells, clipCells as __clipCells} from \"./copypaste\"\n","\n    /*!\n    * tiptap v1.29.0\n    * (c) 2020 Scrumpy UG (limited liability)\n    * @license MIT\n    */\n  \nimport { EditorState, Plugin, PluginKey, TextSelection } from 'prosemirror-state';\nexport { NodeSelection, Plugin, PluginKey, TextSelection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { Schema, DOMParser, DOMSerializer } from 'prosemirror-model';\nimport { dropCursor } from 'prosemirror-dropcursor';\nimport { gapCursor } from 'prosemirror-gapcursor';\nimport { keymap } from 'prosemirror-keymap';\nimport { baseKeymap } from 'prosemirror-commands';\nimport { inputRules, undoInputRule } from 'prosemirror-inputrules';\nimport { getMarkRange, getMarkAttrs, getNodeAttrs, markIsActive, nodeIsActive } from 'tiptap-utils';\nimport Vue from 'vue';\nimport { setBlockType } from 'tiptap-commands';\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n  if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n  if (Reflect.construct.sham) return false;\n  if (typeof Proxy === \"function\") return true;\n\n  try {\n    Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n\n  return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n  var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n  return function _createSuperInternal() {\n    var Super = _getPrototypeOf(Derived),\n        result;\n\n    if (hasNativeReflectConstruct) {\n      var NewTarget = _getPrototypeOf(this).constructor;\n\n      result = Reflect.construct(Super, arguments, NewTarget);\n    } else {\n      result = Super.apply(this, arguments);\n    }\n\n    return _possibleConstructorReturn(this, result);\n  };\n}\n\nfunction _slicedToArray(arr, i) {\n  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n  if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n  return arr2;\n}\n\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction camelCase (str) {\n  return str.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, function (word, index) {\n    return index === 0 ? word.toLowerCase() : word.toUpperCase();\n  }).replace(/\\s+/g, '');\n}\n\nvar ComponentView = /*#__PURE__*/function () {\n  function ComponentView(component, _ref) {\n    var editor = _ref.editor,\n        extension = _ref.extension,\n        parent = _ref.parent,\n        node = _ref.node,\n        view = _ref.view,\n        decorations = _ref.decorations,\n        getPos = _ref.getPos;\n\n    _classCallCheck(this, ComponentView);\n\n    this.component = component;\n    this.editor = editor;\n    this.extension = extension;\n    this.parent = parent;\n    this.node = node;\n    this.view = view;\n    this.decorations = decorations;\n    this.isNode = !!this.node.marks;\n    this.isMark = !this.isNode;\n    this.getPos = this.isMark ? this.getMarkPos : getPos;\n    this.captureEvents = true;\n    this.dom = this.createDOM();\n    this.contentDOM = this.vm.$refs.content;\n  }\n\n  _createClass(ComponentView, [{\n    key: \"createDOM\",\n    value: function createDOM() {\n      var _this = this;\n\n      var Component = Vue.extend(this.component);\n      var props = {\n        editor: this.editor,\n        node: this.node,\n        view: this.view,\n        getPos: function getPos() {\n          return _this.getPos();\n        },\n        decorations: this.decorations,\n        selected: false,\n        options: this.extension.options,\n        updateAttrs: function updateAttrs(attrs) {\n          return _this.updateAttrs(attrs);\n        }\n      };\n\n      if (typeof this.extension.setSelection === 'function') {\n        this.setSelection = this.extension.setSelection;\n      }\n\n      if (typeof this.extension.update === 'function') {\n        this.update = this.extension.update;\n      }\n\n      this.vm = new Component({\n        parent: this.parent,\n        propsData: props\n      }).$mount();\n      return this.vm.$el;\n    }\n  }, {\n    key: \"update\",\n    value: function update(node, decorations) {\n      if (node.type !== this.node.type) {\n        return false;\n      }\n\n      if (node === this.node && this.decorations === decorations) {\n        return true;\n      }\n\n      this.node = node;\n      this.decorations = decorations;\n      this.updateComponentProps({\n        node: node,\n        decorations: decorations\n      });\n      return true;\n    }\n  }, {\n    key: \"updateComponentProps\",\n    value: function updateComponentProps(props) {\n      var _this2 = this;\n\n      if (!this.vm._props) {\n        return;\n      } // Update props in component\n      // TODO: Avoid mutating a prop directly.\n      // Maybe there is a better way to do this?\n\n\n      var originalSilent = Vue.config.silent;\n      Vue.config.silent = true;\n      Object.entries(props).forEach(function (_ref2) {\n        var _ref3 = _slicedToArray(_ref2, 2),\n            key = _ref3[0],\n            value = _ref3[1];\n\n        _this2.vm._props[key] = value;\n      }); // this.vm._props.node = node\n      // this.vm._props.decorations = decorations\n\n      Vue.config.silent = originalSilent;\n    }\n  }, {\n    key: \"updateAttrs\",\n    value: function updateAttrs(attrs) {\n      if (!this.view.editable) {\n        return;\n      }\n\n      var state = this.view.state;\n      var type = this.node.type;\n      var pos = this.getPos();\n\n      var newAttrs = _objectSpread2(_objectSpread2({}, this.node.attrs), attrs);\n\n      var transaction = this.isMark ? state.tr.removeMark(pos.from, pos.to, type).addMark(pos.from, pos.to, type.create(newAttrs)) : state.tr.setNodeMarkup(pos, null, newAttrs);\n      this.view.dispatch(transaction);\n    } // prevent a full re-render of the vue component on update\n    // we'll handle prop updates in `update()`\n\n  }, {\n    key: \"ignoreMutation\",\n    value: function ignoreMutation(mutation) {\n      // allow leaf nodes to be selected\n      if (mutation.type === 'selection') {\n        return false;\n      }\n\n      if (!this.contentDOM) {\n        return true;\n      }\n\n      return !this.contentDOM.contains(mutation.target);\n    } // disable (almost) all prosemirror event listener for node views\n\n  }, {\n    key: \"stopEvent\",\n    value: function stopEvent(event) {\n      var _this3 = this;\n\n      if (typeof this.extension.stopEvent === 'function') {\n        return this.extension.stopEvent(event);\n      }\n\n      var draggable = !!this.extension.schema.draggable; // support a custom drag handle\n\n      if (draggable && event.type === 'mousedown') {\n        var dragHandle = event.target.closest && event.target.closest('[data-drag-handle]');\n        var isValidDragHandle = dragHandle && (this.dom === dragHandle || this.dom.contains(dragHandle));\n\n        if (isValidDragHandle) {\n          this.captureEvents = false;\n          document.addEventListener('dragend', function () {\n            _this3.captureEvents = true;\n          }, {\n            once: true\n          });\n        }\n      }\n\n      var isCopy = event.type === 'copy';\n      var isPaste = event.type === 'paste';\n      var isCut = event.type === 'cut';\n      var isDrag = event.type.startsWith('drag') || event.type === 'drop';\n\n      if (draggable && isDrag || isCopy || isPaste || isCut) {\n        return false;\n      }\n\n      return this.captureEvents;\n    }\n  }, {\n    key: \"selectNode\",\n    value: function selectNode() {\n      this.updateComponentProps({\n        selected: true\n      });\n    }\n  }, {\n    key: \"deselectNode\",\n    value: function deselectNode() {\n      this.updateComponentProps({\n        selected: false\n      });\n    }\n  }, {\n    key: \"getMarkPos\",\n    value: function getMarkPos() {\n      var pos = this.view.posAtDOM(this.dom);\n      var resolvedPos = this.view.state.doc.resolve(pos);\n      var range = getMarkRange(resolvedPos, this.node.type);\n      return range;\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.vm.$destroy();\n    }\n  }]);\n\n  return ComponentView;\n}();\n\nvar Emitter = /*#__PURE__*/function () {\n  function Emitter() {\n    _classCallCheck(this, Emitter);\n  }\n\n  _createClass(Emitter, [{\n    key: \"on\",\n    // Add an event listener for given event\n    value: function on(event, fn) {\n      this._callbacks = this._callbacks || {}; // Create namespace for this event\n\n      if (!this._callbacks[event]) {\n        this._callbacks[event] = [];\n      }\n\n      this._callbacks[event].push(fn);\n\n      return this;\n    }\n  }, {\n    key: \"emit\",\n    value: function emit(event) {\n      var _this = this;\n\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      this._callbacks = this._callbacks || {};\n      var callbacks = this._callbacks[event];\n\n      if (callbacks) {\n        callbacks.forEach(function (callback) {\n          return callback.apply(_this, args);\n        });\n      }\n\n      return this;\n    } // Remove event listener for given event.\n    // If fn is not provided, all event listeners for that event will be removed.\n    // If neither is provided, all event listeners will be removed.\n\n  }, {\n    key: \"off\",\n    value: function off(event, fn) {\n      if (!arguments.length) {\n        this._callbacks = {};\n      } else {\n        // event listeners for the given event\n        var callbacks = this._callbacks ? this._callbacks[event] : null;\n\n        if (callbacks) {\n          if (fn) {\n            this._callbacks[event] = callbacks.filter(function (cb) {\n              return cb !== fn;\n            }); // remove specific handler\n          } else {\n            delete this._callbacks[event]; // remove all handlers\n          }\n        }\n      }\n\n      return this;\n    }\n  }]);\n\n  return Emitter;\n}();\n\nvar Extension = /*#__PURE__*/function () {\n  function Extension() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, Extension);\n\n    this.options = _objectSpread2(_objectSpread2({}, this.defaultOptions), options);\n  }\n\n  _createClass(Extension, [{\n    key: \"init\",\n    value: function init() {\n      return null;\n    }\n  }, {\n    key: \"bindEditor\",\n    value: function bindEditor() {\n      var editor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      this.editor = editor;\n    }\n  }, {\n    key: \"inputRules\",\n    value: function inputRules() {\n      return [];\n    }\n  }, {\n    key: \"pasteRules\",\n    value: function pasteRules() {\n      return [];\n    }\n  }, {\n    key: \"keys\",\n    value: function keys() {\n      return {};\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return null;\n    }\n  }, {\n    key: \"type\",\n    get: function get() {\n      return 'extension';\n    }\n  }, {\n    key: \"defaultOptions\",\n    get: function get() {\n      return {};\n    }\n  }, {\n    key: \"plugins\",\n    get: function get() {\n      return [];\n    }\n  }]);\n\n  return Extension;\n}();\n\nvar ExtensionManager = /*#__PURE__*/function () {\n  function ExtensionManager() {\n    var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n    var editor = arguments.length > 1 ? arguments[1] : undefined;\n\n    _classCallCheck(this, ExtensionManager);\n\n    extensions.forEach(function (extension) {\n      extension.bindEditor(editor);\n      extension.init();\n    });\n    this.extensions = extensions;\n  }\n\n  _createClass(ExtensionManager, [{\n    key: \"keymaps\",\n    value: function keymaps(_ref) {\n      var schema = _ref.schema;\n      var extensionKeymaps = this.extensions.filter(function (extension) {\n        return ['extension'].includes(extension.type);\n      }).filter(function (extension) {\n        return extension.keys;\n      }).map(function (extension) {\n        return extension.keys({\n          schema: schema\n        });\n      });\n      var nodeMarkKeymaps = this.extensions.filter(function (extension) {\n        return ['node', 'mark'].includes(extension.type);\n      }).filter(function (extension) {\n        return extension.keys;\n      }).map(function (extension) {\n        return extension.keys({\n          type: schema[\"\".concat(extension.type, \"s\")][extension.name],\n          schema: schema\n        });\n      });\n      return [].concat(_toConsumableArray(extensionKeymaps), _toConsumableArray(nodeMarkKeymaps)).map(function (keys) {\n        return keymap(keys);\n      });\n    }\n  }, {\n    key: \"inputRules\",\n    value: function inputRules(_ref2) {\n      var schema = _ref2.schema,\n          excludedExtensions = _ref2.excludedExtensions;\n      if (!(excludedExtensions instanceof Array) && excludedExtensions) return [];\n      var allowedExtensions = excludedExtensions instanceof Array ? this.extensions.filter(function (extension) {\n        return !excludedExtensions.includes(extension.name);\n      }) : this.extensions;\n      var extensionInputRules = allowedExtensions.filter(function (extension) {\n        return ['extension'].includes(extension.type);\n      }).filter(function (extension) {\n        return extension.inputRules;\n      }).map(function (extension) {\n        return extension.inputRules({\n          schema: schema\n        });\n      });\n      var nodeMarkInputRules = allowedExtensions.filter(function (extension) {\n        return ['node', 'mark'].includes(extension.type);\n      }).filter(function (extension) {\n        return extension.inputRules;\n      }).map(function (extension) {\n        return extension.inputRules({\n          type: schema[\"\".concat(extension.type, \"s\")][extension.name],\n          schema: schema\n        });\n      });\n      return [].concat(_toConsumableArray(extensionInputRules), _toConsumableArray(nodeMarkInputRules)).reduce(function (allInputRules, inputRules) {\n        return [].concat(_toConsumableArray(allInputRules), _toConsumableArray(inputRules));\n      }, []);\n    }\n  }, {\n    key: \"pasteRules\",\n    value: function pasteRules(_ref3) {\n      var schema = _ref3.schema,\n          excludedExtensions = _ref3.excludedExtensions;\n      if (!(excludedExtensions instanceof Array) && excludedExtensions) return [];\n      var allowedExtensions = excludedExtensions instanceof Array ? this.extensions.filter(function (extension) {\n        return !excludedExtensions.includes(extension.name);\n      }) : this.extensions;\n      var extensionPasteRules = allowedExtensions.filter(function (extension) {\n        return ['extension'].includes(extension.type);\n      }).filter(function (extension) {\n        return extension.pasteRules;\n      }).map(function (extension) {\n        return extension.pasteRules({\n          schema: schema\n        });\n      });\n      var nodeMarkPasteRules = allowedExtensions.filter(function (extension) {\n        return ['node', 'mark'].includes(extension.type);\n      }).filter(function (extension) {\n        return extension.pasteRules;\n      }).map(function (extension) {\n        return extension.pasteRules({\n          type: schema[\"\".concat(extension.type, \"s\")][extension.name],\n          schema: schema\n        });\n      });\n      return [].concat(_toConsumableArray(extensionPasteRules), _toConsumableArray(nodeMarkPasteRules)).reduce(function (allPasteRules, pasteRules) {\n        return [].concat(_toConsumableArray(allPasteRules), _toConsumableArray(pasteRules));\n      }, []);\n    }\n  }, {\n    key: \"commands\",\n    value: function commands(_ref4) {\n      var schema = _ref4.schema,\n          view = _ref4.view;\n      return this.extensions.filter(function (extension) {\n        return extension.commands;\n      }).reduce(function (allCommands, extension) {\n        var name = extension.name,\n            type = extension.type;\n        var commands = {};\n        var value = extension.commands(_objectSpread2({\n          schema: schema\n        }, ['node', 'mark'].includes(type) ? {\n          type: schema[\"\".concat(type, \"s\")][name]\n        } : {}));\n\n        var apply = function apply(cb, attrs) {\n          if (!view.editable) {\n            return false;\n          }\n\n          view.focus();\n          return cb(attrs)(view.state, view.dispatch, view);\n        };\n\n        var handle = function handle(_name, _value) {\n          if (Array.isArray(_value)) {\n            commands[_name] = function (attrs) {\n              return _value.forEach(function (callback) {\n                return apply(callback, attrs);\n              });\n            };\n          } else if (typeof _value === 'function') {\n            commands[_name] = function (attrs) {\n              return apply(_value, attrs);\n            };\n          }\n        };\n\n        if (_typeof(value) === 'object') {\n          Object.entries(value).forEach(function (_ref5) {\n            var _ref6 = _slicedToArray(_ref5, 2),\n                commandName = _ref6[0],\n                commandValue = _ref6[1];\n\n            handle(commandName, commandValue);\n          });\n        } else {\n          handle(name, value);\n        }\n\n        return _objectSpread2(_objectSpread2({}, allCommands), commands);\n      }, {});\n    }\n  }, {\n    key: \"nodes\",\n    get: function get() {\n      return this.extensions.filter(function (extension) {\n        return extension.type === 'node';\n      }).reduce(function (nodes, _ref7) {\n        var name = _ref7.name,\n            schema = _ref7.schema;\n        return _objectSpread2(_objectSpread2({}, nodes), {}, _defineProperty({}, name, schema));\n      }, {});\n    }\n  }, {\n    key: \"options\",\n    get: function get() {\n      var view = this.view;\n      return this.extensions.reduce(function (nodes, extension) {\n        return _objectSpread2(_objectSpread2({}, nodes), {}, _defineProperty({}, extension.name, new Proxy(extension.options, {\n          set: function set(obj, prop, value) {\n            var changed = obj[prop] !== value;\n            Object.assign(obj, _defineProperty({}, prop, value));\n\n            if (changed) {\n              view.updateState(view.state);\n            }\n\n            return true;\n          }\n        })));\n      }, {});\n    }\n  }, {\n    key: \"marks\",\n    get: function get() {\n      return this.extensions.filter(function (extension) {\n        return extension.type === 'mark';\n      }).reduce(function (marks, _ref8) {\n        var name = _ref8.name,\n            schema = _ref8.schema;\n        return _objectSpread2(_objectSpread2({}, marks), {}, _defineProperty({}, name, schema));\n      }, {});\n    }\n  }, {\n    key: \"plugins\",\n    get: function get() {\n      return this.extensions.filter(function (extension) {\n        return extension.plugins;\n      }).reduce(function (allPlugins, _ref9) {\n        var plugins = _ref9.plugins;\n        return [].concat(_toConsumableArray(allPlugins), _toConsumableArray(plugins));\n      }, []);\n    }\n  }]);\n\n  return ExtensionManager;\n}();\n\nfunction injectCSS (css) {\n  if (process.env.NODE_ENV !== 'test') {\n    var style = document.createElement('style');\n    style.type = 'text/css';\n    style.textContent = css;\n    var _document = document,\n        head = _document.head;\n    var firstChild = head.firstChild;\n\n    if (firstChild) {\n      head.insertBefore(style, firstChild);\n    } else {\n      head.appendChild(style);\n    }\n  }\n}\n\nvar Mark = /*#__PURE__*/function (_Extension) {\n  _inherits(Mark, _Extension);\n\n  var _super = _createSuper(Mark);\n\n  function Mark() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, Mark);\n\n    return _super.call(this, options);\n  }\n\n  _createClass(Mark, [{\n    key: \"command\",\n    value: function command() {\n      return function () {};\n    }\n  }, {\n    key: \"type\",\n    get: function get() {\n      return 'mark';\n    }\n  }, {\n    key: \"view\",\n    get: function get() {\n      return null;\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return null;\n    }\n  }]);\n\n  return Mark;\n}(Extension);\n\nfunction minMax() {\n  var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n  var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n  return Math.min(Math.max(parseInt(value, 10), min), max);\n}\n\nvar Node = /*#__PURE__*/function (_Extension) {\n  _inherits(Node, _Extension);\n\n  var _super = _createSuper(Node);\n\n  function Node() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, Node);\n\n    return _super.call(this, options);\n  }\n\n  _createClass(Node, [{\n    key: \"command\",\n    value: function command() {\n      return function () {};\n    }\n  }, {\n    key: \"type\",\n    get: function get() {\n      return 'node';\n    }\n  }, {\n    key: \"view\",\n    get: function get() {\n      return null;\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return null;\n    }\n  }]);\n\n  return Node;\n}(Extension);\n\nvar Doc = /*#__PURE__*/function (_Node) {\n  _inherits(Doc, _Node);\n\n  var _super = _createSuper(Doc);\n\n  function Doc() {\n    _classCallCheck(this, Doc);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Doc, [{\n    key: \"name\",\n    get: function get() {\n      return 'doc';\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return {\n        content: 'block+'\n      };\n    }\n  }]);\n\n  return Doc;\n}(Node);\n\nvar Paragraph = /*#__PURE__*/function (_Node) {\n  _inherits(Paragraph, _Node);\n\n  var _super = _createSuper(Paragraph);\n\n  function Paragraph() {\n    _classCallCheck(this, Paragraph);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Paragraph, [{\n    key: \"commands\",\n    value: function commands(_ref) {\n      var type = _ref.type;\n      return function () {\n        return setBlockType(type);\n      };\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'paragraph';\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return {\n        content: 'inline*',\n        group: 'block',\n        draggable: false,\n        parseDOM: [{\n          tag: 'p'\n        }],\n        toDOM: function toDOM() {\n          return ['p', 0];\n        }\n      };\n    }\n  }]);\n\n  return Paragraph;\n}(Node);\n\nvar Text = /*#__PURE__*/function (_Node) {\n  _inherits(Text, _Node);\n\n  var _super = _createSuper(Text);\n\n  function Text() {\n    _classCallCheck(this, Text);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Text, [{\n    key: \"name\",\n    get: function get() {\n      return 'text';\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return {\n        group: 'inline'\n      };\n    }\n  }]);\n\n  return Text;\n}(Node);\n\nvar css = \".ProseMirror {\\n  position: relative;\\n}\\n\\n.ProseMirror {\\n  word-wrap: break-word;\\n  white-space: pre-wrap;\\n  -webkit-font-variant-ligatures: none;\\n  font-variant-ligatures: none;\\n}\\n\\n.ProseMirror pre {\\n  white-space: pre-wrap;\\n}\\n\\n.ProseMirror-gapcursor {\\n  display: none;\\n  pointer-events: none;\\n  position: absolute;\\n}\\n\\n.ProseMirror-gapcursor:after {\\n  content: \\\"\\\";\\n  display: block;\\n  position: absolute;\\n  top: -2px;\\n  width: 20px;\\n  border-top: 1px solid black;\\n  animation: ProseMirror-cursor-blink 1.1s steps(2, start) infinite;\\n}\\n\\n@keyframes ProseMirror-cursor-blink {\\n  to {\\n    visibility: hidden;\\n  }\\n}\\n\\n.ProseMirror-hideselection *::selection {\\n  background: transparent;\\n}\\n\\n.ProseMirror-hideselection *::-moz-selection {\\n  background: transparent;\\n}\\n\\n.ProseMirror-hideselection * {\\n  caret-color: transparent;\\n}\\n\\n.ProseMirror-focused .ProseMirror-gapcursor {\\n  display: block;\\n}\\n\";\n\nvar Editor = /*#__PURE__*/function (_Emitter) {\n  _inherits(Editor, _Emitter);\n\n  var _super = _createSuper(Editor);\n\n  function Editor() {\n    var _this;\n\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, Editor);\n\n    _this = _super.call(this);\n    _this.defaultOptions = {\n      editorProps: {},\n      editable: true,\n      autoFocus: null,\n      extensions: [],\n      content: '',\n      topNode: 'doc',\n      emptyDocument: {\n        type: 'doc',\n        content: [{\n          type: 'paragraph'\n        }]\n      },\n      useBuiltInExtensions: true,\n      disableInputRules: false,\n      disablePasteRules: false,\n      dropCursor: {},\n      parseOptions: {},\n      injectCSS: true,\n      onInit: function onInit() {},\n      onTransaction: function onTransaction() {},\n      onUpdate: function onUpdate() {},\n      onFocus: function onFocus() {},\n      onBlur: function onBlur() {},\n      onPaste: function onPaste() {},\n      onDrop: function onDrop() {}\n    };\n    _this.events = ['init', 'transaction', 'update', 'focus', 'blur', 'paste', 'drop'];\n\n    _this.init(options);\n\n    return _this;\n  }\n\n  _createClass(Editor, [{\n    key: \"init\",\n    value: function init() {\n      var _this2 = this;\n\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      this.setOptions(_objectSpread2(_objectSpread2({}, this.defaultOptions), options));\n      this.focused = false;\n      this.selection = {\n        from: 0,\n        to: 0\n      };\n      this.element = document.createElement('div');\n      this.extensions = this.createExtensions();\n      this.nodes = this.createNodes();\n      this.marks = this.createMarks();\n      this.schema = this.createSchema();\n      this.plugins = this.createPlugins();\n      this.keymaps = this.createKeymaps();\n      this.inputRules = this.createInputRules();\n      this.pasteRules = this.createPasteRules();\n      this.view = this.createView();\n      this.commands = this.createCommands();\n      this.setActiveNodesAndMarks();\n\n      if (this.options.injectCSS) {\n        injectCSS(css);\n      }\n\n      if (this.options.autoFocus !== null) {\n        this.focus(this.options.autoFocus);\n      }\n\n      this.events.forEach(function (name) {\n        _this2.on(name, _this2.options[camelCase(\"on \".concat(name))] || function () {});\n      });\n      this.emit('init', {\n        view: this.view,\n        state: this.state\n      }); // give extension manager access to our view\n\n      this.extensions.view = this.view;\n    }\n  }, {\n    key: \"setOptions\",\n    value: function setOptions(options) {\n      this.options = _objectSpread2(_objectSpread2({}, this.options), options);\n\n      if (this.view && this.state) {\n        this.view.updateState(this.state);\n      }\n    }\n  }, {\n    key: \"createExtensions\",\n    value: function createExtensions() {\n      return new ExtensionManager([].concat(_toConsumableArray(this.builtInExtensions), _toConsumableArray(this.options.extensions)), this);\n    }\n  }, {\n    key: \"createPlugins\",\n    value: function createPlugins() {\n      return this.extensions.plugins;\n    }\n  }, {\n    key: \"createKeymaps\",\n    value: function createKeymaps() {\n      return this.extensions.keymaps({\n        schema: this.schema\n      });\n    }\n  }, {\n    key: \"createInputRules\",\n    value: function createInputRules() {\n      return this.extensions.inputRules({\n        schema: this.schema,\n        excludedExtensions: this.options.disableInputRules\n      });\n    }\n  }, {\n    key: \"createPasteRules\",\n    value: function createPasteRules() {\n      return this.extensions.pasteRules({\n        schema: this.schema,\n        excludedExtensions: this.options.disablePasteRules\n      });\n    }\n  }, {\n    key: \"createCommands\",\n    value: function createCommands() {\n      return this.extensions.commands({\n        schema: this.schema,\n        view: this.view\n      });\n    }\n  }, {\n    key: \"createNodes\",\n    value: function createNodes() {\n      return this.extensions.nodes;\n    }\n  }, {\n    key: \"createMarks\",\n    value: function createMarks() {\n      return this.extensions.marks;\n    }\n  }, {\n    key: \"createSchema\",\n    value: function createSchema() {\n      return new Schema({\n        topNode: this.options.topNode,\n        nodes: this.nodes,\n        marks: this.marks\n      });\n    }\n  }, {\n    key: \"createState\",\n    value: function createState() {\n      var _this3 = this;\n\n      return EditorState.create({\n        schema: this.schema,\n        doc: this.createDocument(this.options.content),\n        plugins: [].concat(_toConsumableArray(this.plugins), [inputRules({\n          rules: this.inputRules\n        })], _toConsumableArray(this.pasteRules), _toConsumableArray(this.keymaps), [keymap({\n          Backspace: undoInputRule\n        }), keymap(baseKeymap), dropCursor(this.options.dropCursor), gapCursor(), new Plugin({\n          key: new PluginKey('editable'),\n          props: {\n            editable: function editable() {\n              return _this3.options.editable;\n            }\n          }\n        }), new Plugin({\n          props: {\n            attributes: {\n              tabindex: 0\n            },\n            handleDOMEvents: {\n              focus: function focus(view, event) {\n                _this3.focused = true;\n\n                _this3.emit('focus', {\n                  event: event,\n                  state: view.state,\n                  view: view\n                });\n\n                var transaction = _this3.state.tr.setMeta('focused', true);\n\n                _this3.view.dispatch(transaction);\n              },\n              blur: function blur(view, event) {\n                _this3.focused = false;\n\n                _this3.emit('blur', {\n                  event: event,\n                  state: view.state,\n                  view: view\n                });\n\n                var transaction = _this3.state.tr.setMeta('focused', false);\n\n                _this3.view.dispatch(transaction);\n              }\n            }\n          }\n        }), new Plugin({\n          props: this.options.editorProps\n        })])\n      });\n    }\n  }, {\n    key: \"createDocument\",\n    value: function createDocument(content) {\n      var parseOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.options.parseOptions;\n\n      if (content === null) {\n        return this.schema.nodeFromJSON(this.options.emptyDocument);\n      }\n\n      if (_typeof(content) === 'object') {\n        try {\n          return this.schema.nodeFromJSON(content);\n        } catch (error) {\n          console.warn('[tiptap warn]: Invalid content.', 'Passed value:', content, 'Error:', error);\n          return this.schema.nodeFromJSON(this.options.emptyDocument);\n        }\n      }\n\n      if (typeof content === 'string') {\n        var htmlString = \"<div>\".concat(content, \"</div>\");\n        var parser = new window.DOMParser();\n        var element = parser.parseFromString(htmlString, 'text/html').body;\n        return DOMParser.fromSchema(this.schema).parse(element, parseOptions);\n      }\n\n      return false;\n    }\n  }, {\n    key: \"createView\",\n    value: function createView() {\n      var _this4 = this;\n\n      return new EditorView(this.element, {\n        state: this.createState(),\n        handlePaste: function handlePaste() {\n          for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n            args[_key] = arguments[_key];\n          }\n\n          _this4.emit.apply(_this4, ['paste'].concat(args));\n        },\n        handleDrop: function handleDrop() {\n          for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n            args[_key2] = arguments[_key2];\n          }\n\n          _this4.emit.apply(_this4, ['drop'].concat(args));\n        },\n        dispatchTransaction: this.dispatchTransaction.bind(this)\n      });\n    }\n  }, {\n    key: \"setParentComponent\",\n    value: function setParentComponent() {\n      var component = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      if (!component) {\n        return;\n      }\n\n      this.view.setProps({\n        nodeViews: this.initNodeViews({\n          parent: component,\n          extensions: [].concat(_toConsumableArray(this.builtInExtensions), _toConsumableArray(this.options.extensions))\n        })\n      });\n    }\n  }, {\n    key: \"initNodeViews\",\n    value: function initNodeViews(_ref) {\n      var _this5 = this;\n\n      var parent = _ref.parent,\n          extensions = _ref.extensions;\n      return extensions.filter(function (extension) {\n        return ['node', 'mark'].includes(extension.type);\n      }).filter(function (extension) {\n        return extension.view;\n      }).reduce(function (nodeViews, extension) {\n        var nodeView = function nodeView(node, view, getPos, decorations) {\n          var component = extension.view;\n          return new ComponentView(component, {\n            editor: _this5,\n            extension: extension,\n            parent: parent,\n            node: node,\n            view: view,\n            getPos: getPos,\n            decorations: decorations\n          });\n        };\n\n        return _objectSpread2(_objectSpread2({}, nodeViews), {}, _defineProperty({}, extension.name, nodeView));\n      }, {});\n    }\n  }, {\n    key: \"dispatchTransaction\",\n    value: function dispatchTransaction(transaction) {\n      var newState = this.state.apply(transaction);\n      this.view.updateState(newState);\n      this.selection = {\n        from: this.state.selection.from,\n        to: this.state.selection.to\n      };\n      this.setActiveNodesAndMarks();\n      this.emit('transaction', {\n        getHTML: this.getHTML.bind(this),\n        getJSON: this.getJSON.bind(this),\n        state: this.state,\n        transaction: transaction\n      });\n\n      if (!transaction.docChanged || transaction.getMeta('preventUpdate')) {\n        return;\n      }\n\n      this.emitUpdate(transaction);\n    }\n  }, {\n    key: \"emitUpdate\",\n    value: function emitUpdate(transaction) {\n      this.emit('update', {\n        getHTML: this.getHTML.bind(this),\n        getJSON: this.getJSON.bind(this),\n        state: this.state,\n        transaction: transaction\n      });\n    }\n  }, {\n    key: \"resolveSelection\",\n    value: function resolveSelection() {\n      var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      if (this.selection && position === null) {\n        return this.selection;\n      }\n\n      if (position === 'start' || position === true) {\n        return {\n          from: 0,\n          to: 0\n        };\n      }\n\n      if (position === 'end') {\n        var doc = this.state.doc;\n        return {\n          from: doc.content.size,\n          to: doc.content.size\n        };\n      }\n\n      return {\n        from: position,\n        to: position\n      };\n    }\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      var _this6 = this;\n\n      var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      if (this.view.focused && position === null || position === false) {\n        return;\n      }\n\n      var _this$resolveSelectio = this.resolveSelection(position),\n          from = _this$resolveSelectio.from,\n          to = _this$resolveSelectio.to;\n\n      this.setSelection(from, to);\n      setTimeout(function () {\n        return _this6.view.focus();\n      }, 10);\n    }\n  }, {\n    key: \"setSelection\",\n    value: function setSelection() {\n      var from = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var to = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n      var _this$state = this.state,\n          doc = _this$state.doc,\n          tr = _this$state.tr;\n      var resolvedFrom = minMax(from, 0, doc.content.size);\n      var resolvedEnd = minMax(to, 0, doc.content.size);\n      var selection = TextSelection.create(doc, resolvedFrom, resolvedEnd);\n      var transaction = tr.setSelection(selection);\n      this.view.dispatch(transaction);\n    }\n  }, {\n    key: \"blur\",\n    value: function blur() {\n      this.view.dom.blur();\n    }\n  }, {\n    key: \"getSchemaJSON\",\n    value: function getSchemaJSON() {\n      return JSON.parse(JSON.stringify({\n        nodes: this.extensions.nodes,\n        marks: this.extensions.marks\n      }));\n    }\n  }, {\n    key: \"getHTML\",\n    value: function getHTML() {\n      var div = document.createElement('div');\n      var fragment = DOMSerializer.fromSchema(this.schema).serializeFragment(this.state.doc.content);\n      div.appendChild(fragment);\n      return div.innerHTML;\n    }\n  }, {\n    key: \"getJSON\",\n    value: function getJSON() {\n      return this.state.doc.toJSON();\n    }\n  }, {\n    key: \"setContent\",\n    value: function setContent() {\n      var content = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var emitUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var parseOptions = arguments.length > 2 ? arguments[2] : undefined;\n      var _this$state2 = this.state,\n          doc = _this$state2.doc,\n          tr = _this$state2.tr;\n      var document = this.createDocument(content, parseOptions);\n      var selection = TextSelection.create(doc, 0, doc.content.size);\n      var transaction = tr.setSelection(selection).replaceSelectionWith(document, false).setMeta('preventUpdate', !emitUpdate);\n      this.view.dispatch(transaction);\n    }\n  }, {\n    key: \"clearContent\",\n    value: function clearContent() {\n      var emitUpdate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      this.setContent(this.options.emptyDocument, emitUpdate);\n    }\n  }, {\n    key: \"setActiveNodesAndMarks\",\n    value: function setActiveNodesAndMarks() {\n      var _this7 = this;\n\n      this.activeMarks = Object.entries(this.schema.marks).reduce(function (marks, _ref2) {\n        var _ref3 = _slicedToArray(_ref2, 2),\n            name = _ref3[0],\n            mark = _ref3[1];\n\n        return _objectSpread2(_objectSpread2({}, marks), {}, _defineProperty({}, name, function () {\n          var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n          return markIsActive(_this7.state, mark, attrs);\n        }));\n      }, {});\n      this.activeMarkAttrs = Object.entries(this.schema.marks).reduce(function (marks, _ref4) {\n        var _ref5 = _slicedToArray(_ref4, 2),\n            name = _ref5[0],\n            mark = _ref5[1];\n\n        return _objectSpread2(_objectSpread2({}, marks), {}, _defineProperty({}, name, getMarkAttrs(_this7.state, mark)));\n      }, {});\n      this.activeNodes = Object.entries(this.schema.nodes).reduce(function (nodes, _ref6) {\n        var _ref7 = _slicedToArray(_ref6, 2),\n            name = _ref7[0],\n            node = _ref7[1];\n\n        return _objectSpread2(_objectSpread2({}, nodes), {}, _defineProperty({}, name, function () {\n          var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n          return nodeIsActive(_this7.state, node, attrs);\n        }));\n      }, {});\n    }\n  }, {\n    key: \"getMarkAttrs\",\n    value: function getMarkAttrs() {\n      var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      return this.activeMarkAttrs[type];\n    }\n  }, {\n    key: \"getNodeAttrs\",\n    value: function getNodeAttrs$1() {\n      var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      return _objectSpread2({}, getNodeAttrs(this.state, this.schema.nodes[type]));\n    }\n  }, {\n    key: \"registerPlugin\",\n    value: function registerPlugin() {\n      var plugin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      var handlePlugins = arguments.length > 1 ? arguments[1] : undefined;\n      var plugins = typeof handlePlugins === 'function' ? handlePlugins(plugin, this.state.plugins) : [plugin].concat(_toConsumableArray(this.state.plugins));\n      var newState = this.state.reconfigure({\n        plugins: plugins\n      });\n      this.view.updateState(newState);\n    }\n  }, {\n    key: \"unregisterPlugin\",\n    value: function unregisterPlugin() {\n      var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      if (!name || !this.view.docView) {\n        return;\n      }\n\n      var newState = this.state.reconfigure({\n        plugins: this.state.plugins.filter(function (plugin) {\n          return !plugin.key.startsWith(\"\".concat(name, \"$\"));\n        })\n      });\n      this.view.updateState(newState);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (!this.view) {\n        return;\n      }\n\n      this.view.destroy();\n    }\n  }, {\n    key: \"builtInExtensions\",\n    get: function get() {\n      if (!this.options.useBuiltInExtensions) {\n        return [];\n      }\n\n      return [new Doc(), new Text(), new Paragraph()];\n    }\n  }, {\n    key: \"state\",\n    get: function get() {\n      return this.view ? this.view.state : null;\n    }\n  }, {\n    key: \"isActive\",\n    get: function get() {\n      return Object.entries(_objectSpread2(_objectSpread2({}, this.activeMarks), this.activeNodes)).reduce(function (types, _ref8) {\n        var _ref9 = _slicedToArray(_ref8, 2),\n            name = _ref9[0],\n            value = _ref9[1];\n\n        return _objectSpread2(_objectSpread2({}, types), {}, _defineProperty({}, name, function () {\n          var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n          return value(attrs);\n        }));\n      }, {});\n    }\n  }]);\n\n  return Editor;\n}(Emitter);\n\nvar EditorContent = {\n  props: {\n    editor: {\n      default: null,\n      type: Object\n    }\n  },\n  watch: {\n    editor: {\n      immediate: true,\n      handler: function handler(editor) {\n        var _this = this;\n\n        if (editor && editor.element) {\n          this.$nextTick(function () {\n            _this.$el.appendChild(editor.element.firstChild);\n\n            editor.setParentComponent(_this);\n          });\n        }\n      }\n    }\n  },\n  render: function render(createElement) {\n    return createElement('div');\n  },\n  beforeDestroy: function beforeDestroy() {\n    this.editor.element = this.$el;\n  }\n};\n\nvar Menu = /*#__PURE__*/function () {\n  function Menu(_ref) {\n    var _this = this;\n\n    var options = _ref.options;\n\n    _classCallCheck(this, Menu);\n\n    this.options = options;\n    this.preventHide = false; // the mousedown event is fired before blur so we can prevent it\n\n    this.mousedownHandler = this.handleClick.bind(this);\n    this.options.element.addEventListener('mousedown', this.mousedownHandler, {\n      capture: true\n    });\n\n    this.blurHandler = function () {\n      if (_this.preventHide) {\n        _this.preventHide = false;\n        return;\n      }\n\n      _this.options.editor.emit('menubar:focusUpdate', false);\n    };\n\n    this.options.editor.on('blur', this.blurHandler);\n  }\n\n  _createClass(Menu, [{\n    key: \"handleClick\",\n    value: function handleClick() {\n      this.preventHide = true;\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.options.element.removeEventListener('mousedown', this.mousedownHandler);\n      this.options.editor.off('blur', this.blurHandler);\n    }\n  }]);\n\n  return Menu;\n}();\n\nfunction MenuBar (options) {\n  return new Plugin({\n    key: new PluginKey('menu_bar'),\n    view: function view(editorView) {\n      return new Menu({\n        editorView: editorView,\n        options: options\n      });\n    }\n  });\n}\n\nvar EditorMenuBar = {\n  props: {\n    editor: {\n      default: null,\n      type: Object\n    }\n  },\n  data: function data() {\n    return {\n      focused: false\n    };\n  },\n  watch: {\n    editor: {\n      immediate: true,\n      handler: function handler(editor) {\n        var _this = this;\n\n        if (editor) {\n          this.$nextTick(function () {\n            editor.registerPlugin(MenuBar({\n              editor: editor,\n              element: _this.$el\n            }));\n            _this.focused = editor.focused;\n            editor.on('focus', function () {\n              _this.focused = true;\n            });\n            editor.on('menubar:focusUpdate', function (focused) {\n              _this.focused = focused;\n            });\n          });\n        }\n      }\n    }\n  },\n  render: function render() {\n    if (!this.editor) {\n      return null;\n    }\n\n    return this.$scopedSlots.default({\n      focused: this.focused,\n      focus: this.editor.focus,\n      commands: this.editor.commands,\n      isActive: this.editor.isActive,\n      getMarkAttrs: this.editor.getMarkAttrs.bind(this.editor),\n      getNodeAttrs: this.editor.getNodeAttrs.bind(this.editor)\n    });\n  }\n};\n\nfunction textRange(node, from, to) {\n  var range = document.createRange();\n  range.setEnd(node, to == null ? node.nodeValue.length : to);\n  range.setStart(node, from || 0);\n  return range;\n}\n\nfunction singleRect(object, bias) {\n  var rects = object.getClientRects();\n  return !rects.length ? object.getBoundingClientRect() : rects[bias < 0 ? 0 : rects.length - 1];\n}\n\nfunction coordsAtPos(view, pos) {\n  var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var _view$docView$domFrom = view.docView.domFromPos(pos),\n      node = _view$docView$domFrom.node,\n      offset = _view$docView$domFrom.offset;\n\n  var side;\n  var rect;\n\n  if (node.nodeType === 3) {\n    if (end && offset < node.nodeValue.length) {\n      rect = singleRect(textRange(node, offset - 1, offset), -1);\n      side = 'right';\n    } else if (offset < node.nodeValue.length) {\n      rect = singleRect(textRange(node, offset, offset + 1), -1);\n      side = 'left';\n    }\n  } else if (node.firstChild) {\n    if (offset < node.childNodes.length) {\n      var child = node.childNodes[offset];\n      rect = singleRect(child.nodeType === 3 ? textRange(child) : child, -1);\n      side = 'left';\n    }\n\n    if ((!rect || rect.top === rect.bottom) && offset) {\n      var _child = node.childNodes[offset - 1];\n      rect = singleRect(_child.nodeType === 3 ? textRange(_child) : _child, 1);\n      side = 'right';\n    }\n  } else {\n    rect = node.getBoundingClientRect();\n    side = 'left';\n  }\n\n  var x = rect[side];\n  return {\n    top: rect.top,\n    bottom: rect.bottom,\n    left: x,\n    right: x\n  };\n}\n\nvar Menu$1 = /*#__PURE__*/function () {\n  function Menu(_ref) {\n    var _this = this;\n\n    var options = _ref.options,\n        editorView = _ref.editorView;\n\n    _classCallCheck(this, Menu);\n\n    this.options = _objectSpread2(_objectSpread2({}, {\n      element: null,\n      keepInBounds: true,\n      onUpdate: function onUpdate() {\n        return false;\n      }\n    }), options);\n    this.editorView = editorView;\n    this.isActive = false;\n    this.left = 0;\n    this.bottom = 0;\n    this.top = 0;\n    this.preventHide = false; // the mousedown event is fired before blur so we can prevent it\n\n    this.mousedownHandler = this.handleClick.bind(this);\n    this.options.element.addEventListener('mousedown', this.mousedownHandler, {\n      capture: true\n    });\n\n    this.focusHandler = function (_ref2) {\n      var view = _ref2.view;\n\n      _this.update(view);\n    };\n\n    this.options.editor.on('focus', this.focusHandler);\n\n    this.blurHandler = function (_ref3) {\n      var event = _ref3.event;\n\n      if (_this.preventHide) {\n        _this.preventHide = false;\n        return;\n      }\n\n      _this.hide(event);\n    };\n\n    this.options.editor.on('blur', this.blurHandler);\n  }\n\n  _createClass(Menu, [{\n    key: \"handleClick\",\n    value: function handleClick() {\n      this.preventHide = true;\n    }\n  }, {\n    key: \"update\",\n    value: function update(view, lastState) {\n      var state = view.state;\n\n      if (view.composing) {\n        return;\n      } // Don't do anything if the document/selection didn't change\n\n\n      if (lastState && lastState.doc.eq(state.doc) && lastState.selection.eq(state.selection)) {\n        return;\n      } // Hide the tooltip if the selection is empty\n\n\n      if (state.selection.empty) {\n        this.hide();\n        return;\n      } // Otherwise, reposition it and update its content\n\n\n      var _state$selection = state.selection,\n          from = _state$selection.from,\n          to = _state$selection.to; // These are in screen coordinates\n      // We can't use EditorView.cordsAtPos here because it can't handle linebreaks correctly\n      // See: https://github.com/ProseMirror/prosemirror-view/pull/47\n\n      var start = coordsAtPos(view, from);\n      var end = coordsAtPos(view, to, true); // The box in which the tooltip is positioned, to use as base\n\n      var parent = this.options.element.offsetParent;\n\n      if (!parent) {\n        this.hide();\n        return;\n      }\n\n      var box = parent.getBoundingClientRect();\n      var el = this.options.element.getBoundingClientRect(); // Find a center-ish x position from the selection endpoints (when\n      // crossing lines, end may be more to the left)\n\n      var left = (start.left + end.left) / 2 - box.left; // Keep the menuBubble in the bounding box of the offsetParent i\n\n      this.left = Math.round(this.options.keepInBounds ? Math.min(box.width - el.width / 2, Math.max(left, el.width / 2)) : left);\n      this.bottom = Math.round(box.bottom - start.top);\n      this.top = Math.round(end.bottom - box.top);\n      this.isActive = true;\n      this.sendUpdate();\n    }\n  }, {\n    key: \"sendUpdate\",\n    value: function sendUpdate() {\n      this.options.onUpdate({\n        isActive: this.isActive,\n        left: this.left,\n        bottom: this.bottom,\n        top: this.top\n      });\n    }\n  }, {\n    key: \"hide\",\n    value: function hide(event) {\n      if (event && event.relatedTarget && this.options.element.parentNode && this.options.element.parentNode.contains(event.relatedTarget)) {\n        return;\n      }\n\n      this.isActive = false;\n      this.sendUpdate();\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.options.element.removeEventListener('mousedown', this.mousedownHandler);\n      this.options.editor.off('focus', this.focusHandler);\n      this.options.editor.off('blur', this.blurHandler);\n    }\n  }]);\n\n  return Menu;\n}();\n\nfunction MenuBubble (options) {\n  return new Plugin({\n    key: new PluginKey('menu_bubble'),\n    view: function view(editorView) {\n      return new Menu$1({\n        editorView: editorView,\n        options: options\n      });\n    }\n  });\n}\n\nvar EditorMenuBubble = {\n  props: {\n    editor: {\n      default: null,\n      type: Object\n    },\n    keepInBounds: {\n      default: true,\n      type: Boolean\n    }\n  },\n  data: function data() {\n    return {\n      menu: {\n        isActive: false,\n        left: 0,\n        bottom: 0\n      }\n    };\n  },\n  watch: {\n    editor: {\n      immediate: true,\n      handler: function handler(editor) {\n        var _this = this;\n\n        if (editor) {\n          this.$nextTick(function () {\n            editor.registerPlugin(MenuBubble({\n              editor: editor,\n              element: _this.$el,\n              keepInBounds: _this.keepInBounds,\n              onUpdate: function onUpdate(menu) {\n                // the second check ensures event is fired only once\n                if (menu.isActive && _this.menu.isActive === false) {\n                  _this.$emit('show', menu);\n                } else if (!menu.isActive && _this.menu.isActive === true) {\n                  _this.$emit('hide', menu);\n                }\n\n                _this.menu = menu;\n              }\n            }));\n          });\n        }\n      }\n    }\n  },\n  render: function render() {\n    if (!this.editor) {\n      return null;\n    }\n\n    return this.$scopedSlots.default({\n      focused: this.editor.view.focused,\n      focus: this.editor.focus,\n      commands: this.editor.commands,\n      isActive: this.editor.isActive,\n      getMarkAttrs: this.editor.getMarkAttrs.bind(this.editor),\n      getNodeAttrs: this.editor.getNodeAttrs.bind(this.editor),\n      menu: this.menu\n    });\n  },\n  beforeDestroy: function beforeDestroy() {\n    this.editor.unregisterPlugin('menu_bubble');\n  }\n};\n\nvar Menu$2 = /*#__PURE__*/function () {\n  function Menu(_ref) {\n    var _this = this;\n\n    var options = _ref.options,\n        editorView = _ref.editorView;\n\n    _classCallCheck(this, Menu);\n\n    this.options = _objectSpread2(_objectSpread2({}, {\n      resizeObserver: true,\n      element: null,\n      onUpdate: function onUpdate() {\n        return false;\n      }\n    }), options);\n    this.preventHide = false;\n    this.editorView = editorView;\n    this.isActive = false;\n    this.top = 0; // the mousedown event is fired before blur so we can prevent it\n\n    this.mousedownHandler = this.handleClick.bind(this);\n    this.options.element.addEventListener('mousedown', this.mousedownHandler, {\n      capture: true\n    });\n\n    this.focusHandler = function (_ref2) {\n      var view = _ref2.view;\n\n      _this.update(view);\n    };\n\n    this.options.editor.on('focus', this.focusHandler);\n\n    this.blurHandler = function (_ref3) {\n      var event = _ref3.event;\n\n      if (_this.preventHide) {\n        _this.preventHide = false;\n        return;\n      }\n\n      _this.hide(event);\n    };\n\n    this.options.editor.on('blur', this.blurHandler); // sometimes we have to update the position\n    // because of a loaded images for example\n\n    if (this.options.resizeObserver && window.ResizeObserver) {\n      this.resizeObserver = new ResizeObserver(function () {\n        if (_this.isActive) {\n          _this.update(_this.editorView);\n        }\n      });\n      this.resizeObserver.observe(this.editorView.dom);\n    }\n  }\n\n  _createClass(Menu, [{\n    key: \"handleClick\",\n    value: function handleClick() {\n      this.preventHide = true;\n    }\n  }, {\n    key: \"update\",\n    value: function update(view, lastState) {\n      var state = view.state; // Don't do anything if the document/selection didn't change\n\n      if (lastState && lastState.doc.eq(state.doc) && lastState.selection.eq(state.selection)) {\n        return;\n      }\n\n      if (!state.selection.empty) {\n        this.hide();\n        return;\n      }\n\n      var currentDom = view.domAtPos(state.selection.anchor);\n      var isActive = currentDom.node.innerHTML === '<br>' && currentDom.node.tagName === 'P' && currentDom.node.parentNode === view.dom;\n\n      if (!isActive) {\n        this.hide();\n        return;\n      }\n\n      var parent = this.options.element.offsetParent;\n\n      if (!parent) {\n        this.hide();\n        return;\n      }\n\n      var editorBoundings = parent.getBoundingClientRect();\n      var cursorBoundings = view.coordsAtPos(state.selection.anchor);\n      var top = cursorBoundings.top - editorBoundings.top;\n      this.isActive = true;\n      this.top = top;\n      this.sendUpdate();\n    }\n  }, {\n    key: \"sendUpdate\",\n    value: function sendUpdate() {\n      this.options.onUpdate({\n        isActive: this.isActive,\n        top: this.top\n      });\n    }\n  }, {\n    key: \"hide\",\n    value: function hide(event) {\n      if (event && event.relatedTarget && this.options.element.parentNode && this.options.element.parentNode.contains(event.relatedTarget)) {\n        return;\n      }\n\n      this.isActive = false;\n      this.sendUpdate();\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.options.element.removeEventListener('mousedown', this.mousedownHandler);\n\n      if (this.resizeObserver) {\n        this.resizeObserver.unobserve(this.editorView.dom);\n      }\n\n      this.options.editor.off('focus', this.focusHandler);\n      this.options.editor.off('blur', this.blurHandler);\n    }\n  }]);\n\n  return Menu;\n}();\n\nfunction FloatingMenu (options) {\n  return new Plugin({\n    key: new PluginKey('floating_menu'),\n    view: function view(editorView) {\n      return new Menu$2({\n        editorView: editorView,\n        options: options\n      });\n    }\n  });\n}\n\nvar EditorFloatingMenu = {\n  props: {\n    editor: {\n      default: null,\n      type: Object\n    }\n  },\n  data: function data() {\n    return {\n      menu: {\n        isActive: false,\n        left: 0,\n        bottom: 0\n      }\n    };\n  },\n  watch: {\n    editor: {\n      immediate: true,\n      handler: function handler(editor) {\n        var _this = this;\n\n        if (editor) {\n          this.$nextTick(function () {\n            editor.registerPlugin(FloatingMenu({\n              editor: editor,\n              element: _this.$el,\n              onUpdate: function onUpdate(menu) {\n                // the second check ensures event is fired only once\n                if (menu.isActive && _this.menu.isActive === false) {\n                  _this.$emit('show', menu);\n                } else if (!menu.isActive && _this.menu.isActive === true) {\n                  _this.$emit('hide', menu);\n                }\n\n                _this.menu = menu;\n              }\n            }));\n          });\n        }\n      }\n    }\n  },\n  render: function render() {\n    if (!this.editor) {\n      return null;\n    }\n\n    return this.$scopedSlots.default({\n      focused: this.editor.view.focused,\n      focus: this.editor.focus,\n      commands: this.editor.commands,\n      isActive: this.editor.isActive,\n      getMarkAttrs: this.editor.getMarkAttrs.bind(this.editor),\n      getNodeAttrs: this.editor.getNodeAttrs.bind(this.editor),\n      menu: this.menu\n    });\n  },\n  beforeDestroy: function beforeDestroy() {\n    this.editor.unregisterPlugin('floating_menu');\n  }\n};\n\nexport { Doc, Editor, EditorContent, EditorFloatingMenu, EditorMenuBar, EditorMenuBubble, Extension, Mark, Node, Paragraph, Text };\n","// Mappable:: interface\n// There are several things that positions can be mapped through.\n// Such objects conform to this interface.\n//\n//   map:: (pos: number, assoc: ?number) → number\n//   Map a position through this object. When given, `assoc` (should\n//   be -1 or 1, defaults to 1) determines with which side the\n//   position is associated, which determines in which direction to\n//   move when a chunk of content is inserted at the mapped position.\n//\n//   mapResult:: (pos: number, assoc: ?number) → MapResult\n//   Map a position, and return an object containing additional\n//   information about the mapping. The result's `deleted` field tells\n//   you whether the position was deleted (completely enclosed in a\n//   replaced range) during the mapping. When content on only one side\n//   is deleted, the position itself is only considered deleted when\n//   `assoc` points in the direction of the deleted content.\n\n// Recovery values encode a range index and an offset. They are\n// represented as numbers, because tons of them will be created when\n// mapping, for example, a large number of decorations. The number's\n// lower 16 bits provide the index, the remaining bits the offset.\n//\n// Note: We intentionally don't use bit shift operators to en- and\n// decode these, since those clip to 32 bits, which we might in rare\n// cases want to overflow. A 64-bit float can represent 48-bit\n// integers precisely.\n\nconst lower16 = 0xffff\nconst factor16 = Math.pow(2, 16)\n\nfunction makeRecover(index, offset) { return index + offset * factor16 }\nfunction recoverIndex(value) { return value & lower16 }\nfunction recoverOffset(value) { return (value - (value & lower16)) / factor16 }\n\n// ::- An object representing a mapped position with extra\n// information.\nexport class MapResult {\n  constructor(pos, deleted = false, recover = null) {\n    // :: number The mapped version of the position.\n    this.pos = pos\n    // :: bool Tells you whether the position was deleted, that is,\n    // whether the step removed its surroundings from the document.\n    this.deleted = deleted\n    this.recover = recover\n  }\n}\n\n// :: class extends Mappable\n// A map describing the deletions and insertions made by a step, which\n// can be used to find the correspondence between positions in the\n// pre-step version of a document and the same position in the\n// post-step version.\nexport class StepMap {\n  // :: ([number])\n  // Create a position map. The modifications to the document are\n  // represented as an array of numbers, in which each group of three\n  // represents a modified chunk as `[start, oldSize, newSize]`.\n  constructor(ranges, inverted = false) {\n    this.ranges = ranges\n    this.inverted = inverted\n  }\n\n  recover(value) {\n    let diff = 0, index = recoverIndex(value)\n    if (!this.inverted) for (let i = 0; i < index; i++)\n      diff += this.ranges[i * 3 + 2] - this.ranges[i * 3 + 1]\n    return this.ranges[index * 3] + diff + recoverOffset(value)\n  }\n\n  // : (number, ?number) → MapResult\n  mapResult(pos, assoc = 1) { return this._map(pos, assoc, false) }\n\n  // : (number, ?number) → number\n  map(pos, assoc = 1) { return this._map(pos, assoc, true) }\n\n  _map(pos, assoc, simple) {\n    let diff = 0, oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2\n    for (let i = 0; i < this.ranges.length; i += 3) {\n      let start = this.ranges[i] - (this.inverted ? diff : 0)\n      if (start > pos) break\n      let oldSize = this.ranges[i + oldIndex], newSize = this.ranges[i + newIndex], end = start + oldSize\n      if (pos <= end) {\n        let side = !oldSize ? assoc : pos == start ? -1 : pos == end ? 1 : assoc\n        let result = start + diff + (side < 0 ? 0 : newSize)\n        if (simple) return result\n        let recover = pos == (assoc < 0 ? start : end) ? null : makeRecover(i / 3, pos - start)\n        return new MapResult(result, assoc < 0 ? pos != start : pos != end, recover)\n      }\n      diff += newSize - oldSize\n    }\n    return simple ? pos + diff : new MapResult(pos + diff)\n  }\n\n  touches(pos, recover) {\n    let diff = 0, index = recoverIndex(recover)\n    let oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2\n    for (let i = 0; i < this.ranges.length; i += 3) {\n      let start = this.ranges[i] - (this.inverted ? diff : 0)\n      if (start > pos) break\n      let oldSize = this.ranges[i + oldIndex], end = start + oldSize\n      if (pos <= end && i == index * 3) return true\n      diff += this.ranges[i + newIndex] - oldSize\n    }\n    return false\n  }\n\n  // :: ((oldStart: number, oldEnd: number, newStart: number, newEnd: number))\n  // Calls the given function on each of the changed ranges included in\n  // this map.\n  forEach(f) {\n    let oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2\n    for (let i = 0, diff = 0; i < this.ranges.length; i += 3) {\n      let start = this.ranges[i], oldStart = start - (this.inverted ? diff : 0), newStart = start + (this.inverted ? 0 : diff)\n      let oldSize = this.ranges[i + oldIndex], newSize = this.ranges[i + newIndex]\n      f(oldStart, oldStart + oldSize, newStart, newStart + newSize)\n      diff += newSize - oldSize\n    }\n  }\n\n  // :: () → StepMap\n  // Create an inverted version of this map. The result can be used to\n  // map positions in the post-step document to the pre-step document.\n  invert() {\n    return new StepMap(this.ranges, !this.inverted)\n  }\n\n  toString() {\n    return (this.inverted ? \"-\" : \"\") + JSON.stringify(this.ranges)\n  }\n\n  // :: (n: number) → StepMap\n  // Create a map that moves all positions by offset `n` (which may be\n  // negative). This can be useful when applying steps meant for a\n  // sub-document to a larger document, or vice-versa.\n  static offset(n) {\n    return n == 0 ? StepMap.empty : new StepMap(n < 0 ? [0, -n, 0] : [0, 0, n])\n  }\n}\n\nStepMap.empty = new StepMap([])\n\n// :: class extends Mappable\n// A mapping represents a pipeline of zero or more [step\n// maps](#transform.StepMap). It has special provisions for losslessly\n// handling mapping positions through a series of steps in which some\n// steps are inverted versions of earlier steps. (This comes up when\n// ‘[rebasing](/docs/guide/#transform.rebasing)’ steps for\n// collaboration or history management.)\nexport class Mapping {\n  // :: (?[StepMap])\n  // Create a new mapping with the given position maps.\n  constructor(maps, mirror, from, to) {\n    // :: [StepMap]\n    // The step maps in this mapping.\n    this.maps = maps || []\n    // :: number\n    // The starting position in the `maps` array, used when `map` or\n    // `mapResult` is called.\n    this.from = from || 0\n    // :: number\n    // The end position in the `maps` array.\n    this.to = to == null ? this.maps.length : to\n    this.mirror = mirror\n  }\n\n  // :: (?number, ?number) → Mapping\n  // Create a mapping that maps only through a part of this one.\n  slice(from = 0, to = this.maps.length) {\n    return new Mapping(this.maps, this.mirror, from, to)\n  }\n\n  copy() {\n    return new Mapping(this.maps.slice(), this.mirror && this.mirror.slice(), this.from, this.to)\n  }\n\n  // :: (StepMap, ?number)\n  // Add a step map to the end of this mapping. If `mirrors` is\n  // given, it should be the index of the step map that is the mirror\n  // image of this one.\n  appendMap(map, mirrors) {\n    this.to = this.maps.push(map)\n    if (mirrors != null) this.setMirror(this.maps.length - 1, mirrors)\n  }\n\n  // :: (Mapping)\n  // Add all the step maps in a given mapping to this one (preserving\n  // mirroring information).\n  appendMapping(mapping) {\n    for (let i = 0, startSize = this.maps.length; i < mapping.maps.length; i++) {\n      let mirr = mapping.getMirror(i)\n      this.appendMap(mapping.maps[i], mirr != null && mirr < i ? startSize + mirr : null)\n    }\n  }\n\n  // :: (number) → ?number\n  // Finds the offset of the step map that mirrors the map at the\n  // given offset, in this mapping (as per the second argument to\n  // `appendMap`).\n  getMirror(n) {\n    if (this.mirror) for (let i = 0; i < this.mirror.length; i++)\n      if (this.mirror[i] == n) return this.mirror[i + (i % 2 ? -1 : 1)]\n  }\n\n  setMirror(n, m) {\n    if (!this.mirror) this.mirror = []\n    this.mirror.push(n, m)\n  }\n\n  // :: (Mapping)\n  // Append the inverse of the given mapping to this one.\n  appendMappingInverted(mapping) {\n    for (let i = mapping.maps.length - 1, totalSize = this.maps.length + mapping.maps.length; i >= 0; i--) {\n      let mirr = mapping.getMirror(i)\n      this.appendMap(mapping.maps[i].invert(), mirr != null && mirr > i ? totalSize - mirr - 1 : null)\n    }\n  }\n\n  // :: () → Mapping\n  // Create an inverted version of this mapping.\n  invert() {\n    let inverse = new Mapping\n    inverse.appendMappingInverted(this)\n    return inverse\n  }\n\n  // : (number, ?number) → number\n  // Map a position through this mapping.\n  map(pos, assoc = 1) {\n    if (this.mirror) return this._map(pos, assoc, true)\n    for (let i = this.from; i < this.to; i++)\n      pos = this.maps[i].map(pos, assoc)\n    return pos\n  }\n\n  // : (number, ?number) → MapResult\n  // Map a position through this mapping, returning a mapping\n  // result.\n  mapResult(pos, assoc = 1) { return this._map(pos, assoc, false) }\n\n  _map(pos, assoc, simple) {\n    let deleted = false\n\n    for (let i = this.from; i < this.to; i++) {\n      let map = this.maps[i], result = map.mapResult(pos, assoc)\n      if (result.recover != null) {\n        let corr = this.getMirror(i)\n        if (corr != null && corr > i && corr < this.to) {\n          i = corr\n          pos = this.maps[corr].recover(result.recover)\n          continue\n        }\n      }\n\n      if (result.deleted) deleted = true\n      pos = result.pos\n    }\n\n    return simple ? pos : new MapResult(pos, deleted)\n  }\n}\n","import {Mapping} from \"./map\"\n\nexport function TransformError(message) {\n  let err = Error.call(this, message)\n  err.__proto__ = TransformError.prototype\n  return err\n}\n\nTransformError.prototype = Object.create(Error.prototype)\nTransformError.prototype.constructor = TransformError\nTransformError.prototype.name = \"TransformError\"\n\n// ::- Abstraction to build up and track an array of\n// [steps](#transform.Step) representing a document transformation.\n//\n// Most transforming methods return the `Transform` object itself, so\n// that they can be chained.\nexport class Transform {\n  // :: (Node)\n  // Create a transform that starts with the given document.\n  constructor(doc) {\n    // :: Node\n    // The current document (the result of applying the steps in the\n    // transform).\n    this.doc = doc\n    // :: [Step]\n    // The steps in this transform.\n    this.steps = []\n    // :: [Node]\n    // The documents before each of the steps.\n    this.docs = []\n    // :: Mapping\n    // A mapping with the maps for each of the steps in this transform.\n    this.mapping = new Mapping\n  }\n\n  // :: Node The starting document.\n  get before() { return this.docs.length ? this.docs[0] : this.doc }\n\n  // :: (step: Step) → this\n  // Apply a new step in this transform, saving the result. Throws an\n  // error when the step fails.\n  step(object) {\n    let result = this.maybeStep(object)\n    if (result.failed) throw new TransformError(result.failed)\n    return this\n  }\n\n  // :: (Step) → StepResult\n  // Try to apply a step in this transformation, ignoring it if it\n  // fails. Returns the step result.\n  maybeStep(step) {\n    let result = step.apply(this.doc)\n    if (!result.failed) this.addStep(step, result.doc)\n    return result\n  }\n\n  // :: bool\n  // True when the document has been changed (when there are any\n  // steps).\n  get docChanged() {\n    return this.steps.length > 0\n  }\n\n  addStep(step, doc) {\n    this.docs.push(this.doc)\n    this.steps.push(step)\n    this.mapping.appendMap(step.getMap())\n    this.doc = doc\n  }\n}\n","import {ReplaceError} from \"prosemirror-model\"\n\nimport {StepMap} from \"./map\"\n\nfunction mustOverride() { throw new Error(\"Override me\") }\n\nconst stepsByID = Object.create(null)\n\n// ::- A step object represents an atomic change. It generally applies\n// only to the document it was created for, since the positions\n// stored in it will only make sense for that document.\n//\n// New steps are defined by creating classes that extend `Step`,\n// overriding the `apply`, `invert`, `map`, `getMap` and `fromJSON`\n// methods, and registering your class with a unique\n// JSON-serialization identifier using\n// [`Step.jsonID`](#transform.Step^jsonID).\nexport class Step {\n  // :: (doc: Node) → StepResult\n  // Applies this step to the given document, returning a result\n  // object that either indicates failure, if the step can not be\n  // applied to this document, or indicates success by containing a\n  // transformed document.\n  apply(_doc) { return mustOverride() }\n\n  // :: () → StepMap\n  // Get the step map that represents the changes made by this step,\n  // and which can be used to transform between positions in the old\n  // and the new document.\n  getMap() { return StepMap.empty }\n\n  // :: (doc: Node) → Step\n  // Create an inverted version of this step. Needs the document as it\n  // was before the step as argument.\n  invert(_doc) { return mustOverride() }\n\n  // :: (mapping: Mappable) → ?Step\n  // Map this step through a mappable thing, returning either a\n  // version of that step with its positions adjusted, or `null` if\n  // the step was entirely deleted by the mapping.\n  map(_mapping) { return mustOverride() }\n\n  // :: (other: Step) → ?Step\n  // Try to merge this step with another one, to be applied directly\n  // after it. Returns the merged step when possible, null if the\n  // steps can't be merged.\n  merge(_other) { return null }\n\n  // :: () → Object\n  // Create a JSON-serializeable representation of this step. When\n  // defining this for a custom subclass, make sure the result object\n  // includes the step type's [JSON id](#transform.Step^jsonID) under\n  // the `stepType` property.\n  toJSON() { return mustOverride() }\n\n  // :: (Schema, Object) → Step\n  // Deserialize a step from its JSON representation. Will call\n  // through to the step class' own implementation of this method.\n  static fromJSON(schema, json) {\n    if (!json || !json.stepType) throw new RangeError(\"Invalid input for Step.fromJSON\")\n    let type = stepsByID[json.stepType]\n    if (!type) throw new RangeError(`No step type ${json.stepType} defined`)\n    return type.fromJSON(schema, json)\n  }\n\n  // :: (string, constructor<Step>)\n  // To be able to serialize steps to JSON, each step needs a string\n  // ID to attach to its JSON representation. Use this method to\n  // register an ID for your step classes. Try to pick something\n  // that's unlikely to clash with steps from other modules.\n  static jsonID(id, stepClass) {\n    if (id in stepsByID) throw new RangeError(\"Duplicate use of step JSON ID \" + id)\n    stepsByID[id] = stepClass\n    stepClass.prototype.jsonID = id\n    return stepClass\n  }\n}\n\n// ::- The result of [applying](#transform.Step.apply) a step. Contains either a\n// new document or a failure value.\nexport class StepResult {\n  // : (?Node, ?string)\n  constructor(doc, failed) {\n    // :: ?Node The transformed document.\n    this.doc = doc\n    // :: ?string Text providing information about a failed step.\n    this.failed = failed\n  }\n\n  // :: (Node) → StepResult\n  // Create a successful step result.\n  static ok(doc) { return new StepResult(doc, null) }\n\n  // :: (string) → StepResult\n  // Create a failed step result.\n  static fail(message) { return new StepResult(null, message) }\n\n  // :: (Node, number, number, Slice) → StepResult\n  // Call [`Node.replace`](#model.Node.replace) with the given\n  // arguments. Create a successful result if it succeeds, and a\n  // failed one if it throws a `ReplaceError`.\n  static fromReplace(doc, from, to, slice) {\n    try {\n      return StepResult.ok(doc.replace(from, to, slice))\n    } catch (e) {\n      if (e instanceof ReplaceError) return StepResult.fail(e.message)\n      throw e\n    }\n  }\n}\n","import {Slice} from \"prosemirror-model\"\n\nimport {Step, StepResult} from \"./step\"\nimport {StepMap} from \"./map\"\n\n// ::- Replace a part of the document with a slice of new content.\nexport class ReplaceStep extends Step {\n  // :: (number, number, Slice, ?bool)\n  // The given `slice` should fit the 'gap' between `from` and\n  // `to`—the depths must line up, and the surrounding nodes must be\n  // able to be joined with the open sides of the slice. When\n  // `structure` is true, the step will fail if the content between\n  // from and to is not just a sequence of closing and then opening\n  // tokens (this is to guard against rebased replace steps\n  // overwriting something they weren't supposed to).\n  constructor(from, to, slice, structure) {\n    super()\n    this.from = from\n    this.to = to\n    this.slice = slice\n    this.structure = !!structure\n  }\n\n  apply(doc) {\n    if (this.structure && contentBetween(doc, this.from, this.to))\n      return StepResult.fail(\"Structure replace would overwrite content\")\n    return StepResult.fromReplace(doc, this.from, this.to, this.slice)\n  }\n\n  getMap() {\n    return new StepMap([this.from, this.to - this.from, this.slice.size])\n  }\n\n  invert(doc) {\n    return new ReplaceStep(this.from, this.from + this.slice.size, doc.slice(this.from, this.to))\n  }\n\n  map(mapping) {\n    let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1)\n    if (from.deleted && to.deleted) return null\n    return new ReplaceStep(from.pos, Math.max(from.pos, to.pos), this.slice)\n  }\n\n  merge(other) {\n    if (!(other instanceof ReplaceStep) || other.structure != this.structure) return null\n\n    if (this.from + this.slice.size == other.from && !this.slice.openEnd && !other.slice.openStart) {\n      let slice = this.slice.size + other.slice.size == 0 ? Slice.empty\n          : new Slice(this.slice.content.append(other.slice.content), this.slice.openStart, other.slice.openEnd)\n      return new ReplaceStep(this.from, this.to + (other.to - other.from), slice, this.structure)\n    } else if (other.to == this.from && !this.slice.openStart && !other.slice.openEnd) {\n      let slice = this.slice.size + other.slice.size == 0 ? Slice.empty\n          : new Slice(other.slice.content.append(this.slice.content), other.slice.openStart, this.slice.openEnd)\n      return new ReplaceStep(other.from, this.to, slice, this.structure)\n    } else {\n      return null\n    }\n  }\n\n  toJSON() {\n    let json = {stepType: \"replace\", from: this.from, to: this.to}\n    if (this.slice.size) json.slice = this.slice.toJSON()\n    if (this.structure) json.structure = true\n    return json\n  }\n\n  static fromJSON(schema, json) {\n    if (typeof json.from != \"number\" || typeof json.to != \"number\")\n      throw new RangeError(\"Invalid input for ReplaceStep.fromJSON\")\n    return new ReplaceStep(json.from, json.to, Slice.fromJSON(schema, json.slice), !!json.structure)\n  }\n}\n\nStep.jsonID(\"replace\", ReplaceStep)\n\n// ::- Replace a part of the document with a slice of content, but\n// preserve a range of the replaced content by moving it into the\n// slice.\nexport class ReplaceAroundStep extends Step {\n  // :: (number, number, number, number, Slice, number, ?bool)\n  // Create a replace-around step with the given range and gap.\n  // `insert` should be the point in the slice into which the content\n  // of the gap should be moved. `structure` has the same meaning as\n  // it has in the [`ReplaceStep`](#transform.ReplaceStep) class.\n  constructor(from, to, gapFrom, gapTo, slice, insert, structure) {\n    super()\n    this.from = from\n    this.to = to\n    this.gapFrom = gapFrom\n    this.gapTo = gapTo\n    this.slice = slice\n    this.insert = insert\n    this.structure = !!structure\n  }\n\n  apply(doc) {\n    if (this.structure && (contentBetween(doc, this.from, this.gapFrom) ||\n                           contentBetween(doc, this.gapTo, this.to)))\n      return StepResult.fail(\"Structure gap-replace would overwrite content\")\n\n    let gap = doc.slice(this.gapFrom, this.gapTo)\n    if (gap.openStart || gap.openEnd)\n      return StepResult.fail(\"Gap is not a flat range\")\n    let inserted = this.slice.insertAt(this.insert, gap.content)\n    if (!inserted) return StepResult.fail(\"Content does not fit in gap\")\n    return StepResult.fromReplace(doc, this.from, this.to, inserted)\n  }\n\n  getMap() {\n    return new StepMap([this.from, this.gapFrom - this.from, this.insert,\n                        this.gapTo, this.to - this.gapTo, this.slice.size - this.insert])\n  }\n\n  invert(doc) {\n    let gap = this.gapTo - this.gapFrom\n    return new ReplaceAroundStep(this.from, this.from + this.slice.size + gap,\n                                 this.from + this.insert, this.from + this.insert + gap,\n                                 doc.slice(this.from, this.to).removeBetween(this.gapFrom - this.from, this.gapTo - this.from),\n                                 this.gapFrom - this.from, this.structure)\n  }\n\n  map(mapping) {\n    let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1)\n    let gapFrom = mapping.map(this.gapFrom, -1), gapTo = mapping.map(this.gapTo, 1)\n    if ((from.deleted && to.deleted) || gapFrom < from.pos || gapTo > to.pos) return null\n    return new ReplaceAroundStep(from.pos, to.pos, gapFrom, gapTo, this.slice, this.insert, this.structure)\n  }\n\n  toJSON() {\n    let json = {stepType: \"replaceAround\", from: this.from, to: this.to,\n                gapFrom: this.gapFrom, gapTo: this.gapTo, insert: this.insert}\n    if (this.slice.size) json.slice = this.slice.toJSON()\n    if (this.structure) json.structure = true\n    return json\n  }\n\n  static fromJSON(schema, json) {\n    if (typeof json.from != \"number\" || typeof json.to != \"number\" ||\n        typeof json.gapFrom != \"number\" || typeof json.gapTo != \"number\" || typeof json.insert != \"number\")\n      throw new RangeError(\"Invalid input for ReplaceAroundStep.fromJSON\")\n    return new ReplaceAroundStep(json.from, json.to, json.gapFrom, json.gapTo,\n                                 Slice.fromJSON(schema, json.slice), json.insert, !!json.structure)\n  }\n}\n\nStep.jsonID(\"replaceAround\", ReplaceAroundStep)\n\nfunction contentBetween(doc, from, to) {\n  let $from = doc.resolve(from), dist = to - from, depth = $from.depth\n  while (dist > 0 && depth > 0 && $from.indexAfter(depth) == $from.node(depth).childCount) {\n    depth--\n    dist--\n  }\n  if (dist > 0) {\n    let next = $from.node(depth).maybeChild($from.indexAfter(depth))\n    while (dist > 0) {\n      if (!next || next.isLeaf) return true\n      next = next.firstChild\n      dist--\n    }\n  }\n  return false\n}\n","import {Slice, Fragment} from \"prosemirror-model\"\n\nimport {Transform} from \"./transform\"\nimport {ReplaceStep, ReplaceAroundStep} from \"./replace_step\"\n\nfunction canCut(node, start, end) {\n  return (start == 0 || node.canReplace(start, node.childCount)) &&\n    (end == node.childCount || node.canReplace(0, end))\n}\n\n// :: (NodeRange) → ?number\n// Try to find a target depth to which the content in the given range\n// can be lifted. Will not go across\n// [isolating](#model.NodeSpec.isolating) parent nodes.\nexport function liftTarget(range) {\n  let parent = range.parent\n  let content = parent.content.cutByIndex(range.startIndex, range.endIndex)\n  for (let depth = range.depth;; --depth) {\n    let node = range.$from.node(depth)\n    let index = range.$from.index(depth), endIndex = range.$to.indexAfter(depth)\n    if (depth < range.depth && node.canReplace(index, endIndex, content))\n      return depth\n    if (depth == 0 || node.type.spec.isolating || !canCut(node, index, endIndex)) break\n  }\n}\n\n// :: (NodeRange, number) → this\n// Split the content in the given range off from its parent, if there\n// is sibling content before or after it, and move it up the tree to\n// the depth specified by `target`. You'll probably want to use\n// [`liftTarget`](#transform.liftTarget) to compute `target`, to make\n// sure the lift is valid.\nTransform.prototype.lift = function(range, target) {\n  let {$from, $to, depth} = range\n\n  let gapStart = $from.before(depth + 1), gapEnd = $to.after(depth + 1)\n  let start = gapStart, end = gapEnd\n\n  let before = Fragment.empty, openStart = 0\n  for (let d = depth, splitting = false; d > target; d--)\n    if (splitting || $from.index(d) > 0) {\n      splitting = true\n      before = Fragment.from($from.node(d).copy(before))\n      openStart++\n    } else {\n      start--\n    }\n  let after = Fragment.empty, openEnd = 0\n  for (let d = depth, splitting = false; d > target; d--)\n    if (splitting || $to.after(d + 1) < $to.end(d)) {\n      splitting = true\n      after = Fragment.from($to.node(d).copy(after))\n      openEnd++\n    } else {\n      end++\n    }\n\n  return this.step(new ReplaceAroundStep(start, end, gapStart, gapEnd,\n                                         new Slice(before.append(after), openStart, openEnd),\n                                         before.size - openStart, true))\n}\n\n// :: (NodeRange, NodeType, ?Object, ?NodeRange) → ?[{type: NodeType, attrs: ?Object}]\n// Try to find a valid way to wrap the content in the given range in a\n// node of the given type. May introduce extra nodes around and inside\n// the wrapper node, if necessary. Returns null if no valid wrapping\n// could be found. When `innerRange` is given, that range's content is\n// used as the content to fit into the wrapping, instead of the\n// content of `range`.\nexport function findWrapping(range, nodeType, attrs, innerRange = range) {\n  let around = findWrappingOutside(range, nodeType)\n  let inner = around && findWrappingInside(innerRange, nodeType)\n  if (!inner) return null\n  return around.map(withAttrs).concat({type: nodeType, attrs}).concat(inner.map(withAttrs))\n}\n\nfunction withAttrs(type) { return {type, attrs: null} }\n\nfunction findWrappingOutside(range, type) {\n  let {parent, startIndex, endIndex} = range\n  let around = parent.contentMatchAt(startIndex).findWrapping(type)\n  if (!around) return null\n  let outer = around.length ? around[0] : type\n  return parent.canReplaceWith(startIndex, endIndex, outer) ? around : null\n}\n\nfunction findWrappingInside(range, type) {\n  let {parent, startIndex, endIndex} = range\n  let inner = parent.child(startIndex)\n  let inside = type.contentMatch.findWrapping(inner.type)\n  if (!inside) return null\n  let lastType = inside.length ? inside[inside.length - 1] : type\n  let innerMatch = lastType.contentMatch\n  for (let i = startIndex; innerMatch && i < endIndex; i++)\n    innerMatch = innerMatch.matchType(parent.child(i).type)\n  if (!innerMatch || !innerMatch.validEnd) return null\n  return inside\n}\n\n// :: (NodeRange, [{type: NodeType, attrs: ?Object}]) → this\n// Wrap the given [range](#model.NodeRange) in the given set of wrappers.\n// The wrappers are assumed to be valid in this position, and should\n// probably be computed with [`findWrapping`](#transform.findWrapping).\nTransform.prototype.wrap = function(range, wrappers) {\n  let content = Fragment.empty\n  for (let i = wrappers.length - 1; i >= 0; i--)\n    content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content))\n\n  let start = range.start, end = range.end\n  return this.step(new ReplaceAroundStep(start, end, start, end, new Slice(content, 0, 0), wrappers.length, true))\n}\n\n// :: (number, ?number, NodeType, ?Object) → this\n// Set the type of all textblocks (partly) between `from` and `to` to\n// the given node type with the given attributes.\nTransform.prototype.setBlockType = function(from, to = from, type, attrs) {\n  if (!type.isTextblock) throw new RangeError(\"Type given to setBlockType should be a textblock\")\n  let mapFrom = this.steps.length\n  this.doc.nodesBetween(from, to, (node, pos) => {\n    if (node.isTextblock && !node.hasMarkup(type, attrs) && canChangeType(this.doc, this.mapping.slice(mapFrom).map(pos), type)) {\n      // Ensure all markup that isn't allowed in the new node type is cleared\n      this.clearIncompatible(this.mapping.slice(mapFrom).map(pos, 1), type)\n      let mapping = this.mapping.slice(mapFrom)\n      let startM = mapping.map(pos, 1), endM = mapping.map(pos + node.nodeSize, 1)\n      this.step(new ReplaceAroundStep(startM, endM, startM + 1, endM - 1,\n                                      new Slice(Fragment.from(type.create(attrs, null, node.marks)), 0, 0), 1, true))\n      return false\n    }\n  })\n  return this\n}\n\nfunction canChangeType(doc, pos, type) {\n  let $pos = doc.resolve(pos), index = $pos.index()\n  return $pos.parent.canReplaceWith(index, index + 1, type)\n}\n\n// :: (number, ?NodeType, ?Object, ?[Mark]) → this\n// Change the type, attributes, and/or marks of the node at `pos`.\n// When `type` isn't given, the existing node type is preserved,\nTransform.prototype.setNodeMarkup = function(pos, type, attrs, marks) {\n  let node = this.doc.nodeAt(pos)\n  if (!node) throw new RangeError(\"No node at given position\")\n  if (!type) type = node.type\n  let newNode = type.create(attrs, null, marks || node.marks)\n  if (node.isLeaf)\n    return this.replaceWith(pos, pos + node.nodeSize, newNode)\n\n  if (!type.validContent(node.content))\n    throw new RangeError(\"Invalid content for node type \" + type.name)\n\n  return this.step(new ReplaceAroundStep(pos, pos + node.nodeSize, pos + 1, pos + node.nodeSize - 1,\n                                         new Slice(Fragment.from(newNode), 0, 0), 1, true))\n}\n\n// :: (Node, number, number, ?[?{type: NodeType, attrs: ?Object}]) → bool\n// Check whether splitting at the given position is allowed.\nexport function canSplit(doc, pos, depth = 1, typesAfter) {\n  let $pos = doc.resolve(pos), base = $pos.depth - depth\n  let innerType = (typesAfter && typesAfter[typesAfter.length - 1]) || $pos.parent\n  if (base < 0 || $pos.parent.type.spec.isolating ||\n      !$pos.parent.canReplace($pos.index(), $pos.parent.childCount) ||\n      !innerType.type.validContent($pos.parent.content.cutByIndex($pos.index(), $pos.parent.childCount)))\n    return false\n  for (let d = $pos.depth - 1, i = depth - 2; d > base; d--, i--) {\n    let node = $pos.node(d), index = $pos.index(d)\n    if (node.type.spec.isolating) return false\n    let rest = node.content.cutByIndex(index, node.childCount)\n    let after = (typesAfter && typesAfter[i]) || node\n    if (after != node) rest = rest.replaceChild(0, after.type.create(after.attrs))\n    if (!node.canReplace(index + 1, node.childCount) || !after.type.validContent(rest))\n      return false\n  }\n  let index = $pos.indexAfter(base)\n  let baseType = typesAfter && typesAfter[0]\n  return $pos.node(base).canReplaceWith(index, index, baseType ? baseType.type : $pos.node(base + 1).type)\n}\n\n// :: (number, ?number, ?[?{type: NodeType, attrs: ?Object}]) → this\n// Split the node at the given position, and optionally, if `depth` is\n// greater than one, any number of nodes above that. By default, the\n// parts split off will inherit the node type of the original node.\n// This can be changed by passing an array of types and attributes to\n// use after the split.\nTransform.prototype.split = function(pos, depth = 1, typesAfter) {\n  let $pos = this.doc.resolve(pos), before = Fragment.empty, after = Fragment.empty\n  for (let d = $pos.depth, e = $pos.depth - depth, i = depth - 1; d > e; d--, i--) {\n    before = Fragment.from($pos.node(d).copy(before))\n    let typeAfter = typesAfter && typesAfter[i]\n    after = Fragment.from(typeAfter ? typeAfter.type.create(typeAfter.attrs, after) : $pos.node(d).copy(after))\n  }\n  return this.step(new ReplaceStep(pos, pos, new Slice(before.append(after), depth, depth), true))\n}\n\n// :: (Node, number) → bool\n// Test whether the blocks before and after a given position can be\n// joined.\nexport function canJoin(doc, pos) {\n  let $pos = doc.resolve(pos), index = $pos.index()\n  return joinable($pos.nodeBefore, $pos.nodeAfter) &&\n    $pos.parent.canReplace(index, index + 1)\n}\n\nfunction joinable(a, b) {\n  return a && b && !a.isLeaf && a.canAppend(b)\n}\n\n// :: (Node, number, ?number) → ?number\n// Find an ancestor of the given position that can be joined to the\n// block before (or after if `dir` is positive). Returns the joinable\n// point, if any.\nexport function joinPoint(doc, pos, dir = -1) {\n  let $pos = doc.resolve(pos)\n  for (let d = $pos.depth;; d--) {\n    let before, after, index = $pos.index(d)\n    if (d == $pos.depth) {\n      before = $pos.nodeBefore\n      after = $pos.nodeAfter\n    } else if (dir > 0) {\n      before = $pos.node(d + 1)\n      index++\n      after = $pos.node(d).maybeChild(index)\n    } else {\n      before = $pos.node(d).maybeChild(index - 1)\n      after = $pos.node(d + 1)\n    }\n    if (before && !before.isTextblock && joinable(before, after) &&\n        $pos.node(d).canReplace(index, index + 1)) return pos\n    if (d == 0) break\n    pos = dir < 0 ? $pos.before(d) : $pos.after(d)\n  }\n}\n\n// :: (number, ?number) → this\n// Join the blocks around the given position. If depth is 2, their\n// last and first siblings are also joined, and so on.\nTransform.prototype.join = function(pos, depth = 1) {\n  let step = new ReplaceStep(pos - depth, pos + depth, Slice.empty, true)\n  return this.step(step)\n}\n\n// :: (Node, number, NodeType) → ?number\n// Try to find a point where a node of the given type can be inserted\n// near `pos`, by searching up the node hierarchy when `pos` itself\n// isn't a valid place but is at the start or end of a node. Return\n// null if no position was found.\nexport function insertPoint(doc, pos, nodeType) {\n  let $pos = doc.resolve(pos)\n  if ($pos.parent.canReplaceWith($pos.index(), $pos.index(), nodeType)) return pos\n\n  if ($pos.parentOffset == 0)\n    for (let d = $pos.depth - 1; d >= 0; d--) {\n      let index = $pos.index(d)\n      if ($pos.node(d).canReplaceWith(index, index, nodeType)) return $pos.before(d + 1)\n      if (index > 0) return null\n    }\n  if ($pos.parentOffset == $pos.parent.content.size)\n    for (let d = $pos.depth - 1; d >= 0; d--) {\n      let index = $pos.indexAfter(d)\n      if ($pos.node(d).canReplaceWith(index, index, nodeType)) return $pos.after(d + 1)\n      if (index < $pos.node(d).childCount) return null\n    }\n}\n\n// :: (Node, number, Slice) → ?number\n// Finds a position at or around the given position where the given\n// slice can be inserted. Will look at parent nodes' nearest boundary\n// and try there, even if the original position wasn't directly at the\n// start or end of that node. Returns null when no position was found.\nexport function dropPoint(doc, pos, slice) {\n  let $pos = doc.resolve(pos)\n  if (!slice.content.size) return pos\n  let content = slice.content\n  for (let i = 0; i < slice.openStart; i++) content = content.firstChild.content\n  for (let pass = 1; pass <= (slice.openStart == 0 && slice.size ? 2 : 1); pass++) {\n    for (let d = $pos.depth; d >= 0; d--) {\n      let bias = d == $pos.depth ? 0 : $pos.pos <= ($pos.start(d + 1) + $pos.end(d + 1)) / 2 ? -1 : 1\n      let insertPos = $pos.index(d) + (bias > 0 ? 1 : 0)\n      if (pass == 1\n          ? $pos.node(d).canReplace(insertPos, insertPos, content)\n          : $pos.node(d).contentMatchAt(insertPos).findWrapping(content.firstChild.type))\n        return bias == 0 ? $pos.pos : bias < 0 ? $pos.before(d + 1) : $pos.after(d + 1)\n    }\n  }\n  return null\n}\n","import {Fragment, Slice} from \"prosemirror-model\"\nimport {Step, StepResult} from \"./step\"\n\nfunction mapFragment(fragment, f, parent) {\n  let mapped = []\n  for (let i = 0; i < fragment.childCount; i++) {\n    let child = fragment.child(i)\n    if (child.content.size) child = child.copy(mapFragment(child.content, f, child))\n    if (child.isInline) child = f(child, parent, i)\n    mapped.push(child)\n  }\n  return Fragment.fromArray(mapped)\n}\n\n// ::- Add a mark to all inline content between two positions.\nexport class AddMarkStep extends Step {\n  // :: (number, number, Mark)\n  constructor(from, to, mark) {\n    super()\n    this.from = from\n    this.to = to\n    this.mark = mark\n  }\n\n  apply(doc) {\n    let oldSlice = doc.slice(this.from, this.to), $from = doc.resolve(this.from)\n    let parent = $from.node($from.sharedDepth(this.to))\n    let slice = new Slice(mapFragment(oldSlice.content, (node, parent) => {\n      if (!parent.type.allowsMarkType(this.mark.type)) return node\n      return node.mark(this.mark.addToSet(node.marks))\n    }, parent), oldSlice.openStart, oldSlice.openEnd)\n    return StepResult.fromReplace(doc, this.from, this.to, slice)\n  }\n\n  invert() {\n    return new RemoveMarkStep(this.from, this.to, this.mark)\n  }\n\n  map(mapping) {\n    let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1)\n    if (from.deleted && to.deleted || from.pos >= to.pos) return null\n    return new AddMarkStep(from.pos, to.pos, this.mark)\n  }\n\n  merge(other) {\n    if (other instanceof AddMarkStep &&\n        other.mark.eq(this.mark) &&\n        this.from <= other.to && this.to >= other.from)\n      return new AddMarkStep(Math.min(this.from, other.from),\n                             Math.max(this.to, other.to), this.mark)\n  }\n\n  toJSON() {\n    return {stepType: \"addMark\", mark: this.mark.toJSON(),\n            from: this.from, to: this.to}\n  }\n\n  static fromJSON(schema, json) {\n    if (typeof json.from != \"number\" || typeof json.to != \"number\")\n      throw new RangeError(\"Invalid input for AddMarkStep.fromJSON\")\n    return new AddMarkStep(json.from, json.to, schema.markFromJSON(json.mark))\n  }\n}\n\nStep.jsonID(\"addMark\", AddMarkStep)\n\n// ::- Remove a mark from all inline content between two positions.\nexport class RemoveMarkStep extends Step {\n  // :: (number, number, Mark)\n  constructor(from, to, mark) {\n    super()\n    this.from = from\n    this.to = to\n    this.mark = mark\n  }\n\n  apply(doc) {\n    let oldSlice = doc.slice(this.from, this.to)\n    let slice = new Slice(mapFragment(oldSlice.content, node => {\n      return node.mark(this.mark.removeFromSet(node.marks))\n    }), oldSlice.openStart, oldSlice.openEnd)\n    return StepResult.fromReplace(doc, this.from, this.to, slice)\n  }\n\n  invert() {\n    return new AddMarkStep(this.from, this.to, this.mark)\n  }\n\n  map(mapping) {\n    let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1)\n    if (from.deleted && to.deleted || from.pos >= to.pos) return null\n    return new RemoveMarkStep(from.pos, to.pos, this.mark)\n  }\n\n  merge(other) {\n    if (other instanceof RemoveMarkStep &&\n        other.mark.eq(this.mark) &&\n        this.from <= other.to && this.to >= other.from)\n      return new RemoveMarkStep(Math.min(this.from, other.from),\n                                Math.max(this.to, other.to), this.mark)\n  }\n\n  toJSON() {\n    return {stepType: \"removeMark\", mark: this.mark.toJSON(),\n            from: this.from, to: this.to}\n  }\n\n  static fromJSON(schema, json) {\n    if (typeof json.from != \"number\" || typeof json.to != \"number\")\n      throw new RangeError(\"Invalid input for RemoveMarkStep.fromJSON\")\n    return new RemoveMarkStep(json.from, json.to, schema.markFromJSON(json.mark))\n  }\n}\n\nStep.jsonID(\"removeMark\", RemoveMarkStep)\n","import {Plugin} from \"prosemirror-state\"\n\n// ::- Input rules are regular expressions describing a piece of text\n// that, when typed, causes something to happen. This might be\n// changing two dashes into an emdash, wrapping a paragraph starting\n// with `\"> \"` into a blockquote, or something entirely different.\nexport class InputRule {\n  // :: (RegExp, union<string, (state: EditorState, match: [string], start: number, end: number) → ?Transaction>)\n  // Create an input rule. The rule applies when the user typed\n  // something and the text directly in front of the cursor matches\n  // `match`, which should probably end with `$`.\n  //\n  // The `handler` can be a string, in which case the matched text, or\n  // the first matched group in the regexp, is replaced by that\n  // string.\n  //\n  // Or a it can be a function, which will be called with the match\n  // array produced by\n  // [`RegExp.exec`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec),\n  // as well as the start and end of the matched range, and which can\n  // return a [transaction](#state.Transaction) that describes the\n  // rule's effect, or null to indicate the input was not handled.\n  constructor(match, handler) {\n    this.match = match\n    this.handler = typeof handler == \"string\" ? stringHandler(handler) : handler\n  }\n}\n\nfunction stringHandler(string) {\n  return function(state, match, start, end) {\n    let insert = string\n    if (match[1]) {\n      let offset = match[0].lastIndexOf(match[1])\n      insert += match[0].slice(offset + match[1].length)\n      start += offset\n      let cutOff = start - end\n      if (cutOff > 0) {\n        insert = match[0].slice(offset - cutOff, offset) + insert\n        start = end\n      }\n    }\n    return state.tr.insertText(insert, start, end)\n  }\n}\n\nconst MAX_MATCH = 500\n\n// :: (config: {rules: [InputRule]}) → Plugin\n// Create an input rules plugin. When enabled, it will cause text\n// input that matches any of the given rules to trigger the rule's\n// action.\nexport function inputRules({rules}) {\n  let plugin = new Plugin({\n    state: {\n      init() { return null },\n      apply(tr, prev) {\n        let stored = tr.getMeta(this)\n        if (stored) return stored\n        return tr.selectionSet || tr.docChanged ? null : prev\n      }\n    },\n\n    props: {\n      handleTextInput(view, from, to, text) {\n        return run(view, from, to, text, rules, plugin)\n      },\n      handleDOMEvents: {\n        compositionend: (view) => {\n          setTimeout(() => {\n            let {$cursor} = view.state.selection\n            if ($cursor) run(view, $cursor.pos, $cursor.pos, \"\", rules, plugin)\n          })\n        }\n      }\n    },\n\n    isInputRules: true\n  })\n  return plugin\n}\n\nfunction run(view, from, to, text, rules, plugin) {\n  if (view.composing) return false\n  let state = view.state, $from = state.doc.resolve(from)\n  if ($from.parent.type.spec.code) return false\n  let textBefore = $from.parent.textBetween(Math.max(0, $from.parentOffset - MAX_MATCH), $from.parentOffset,\n                                            null, \"\\ufffc\") + text\n  for (let i = 0; i < rules.length; i++) {\n    let match = rules[i].match.exec(textBefore)\n    let tr = match && rules[i].handler(state, match, from - (match[0].length - text.length), to)\n    if (!tr) continue\n    view.dispatch(tr.setMeta(plugin, {transform: tr, from, to, text}))\n    return true\n  }\n  return false\n}\n\n// :: (EditorState, ?(Transaction)) → bool\n// This is a command that will undo an input rule, if applying such a\n// rule was the last thing that the user did.\nexport function undoInputRule(state, dispatch) {\n  let plugins = state.plugins\n  for (let i = 0; i < plugins.length; i++) {\n    let plugin = plugins[i], undoable\n    if (plugin.spec.isInputRules && (undoable = plugin.getState(state))) {\n      if (dispatch) {\n        let tr = state.tr, toUndo = undoable.transform\n        for (let j = toUndo.steps.length - 1; j >= 0; j--)\n          tr.step(toUndo.steps[j].invert(toUndo.docs[j]))\n        let marks = tr.doc.resolve(undoable.from).marks()\n        dispatch(tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks)))\n      }\n      return true\n    }\n  }\n  return false\n}\n","import {InputRule} from \"./inputrules\"\n\n// :: InputRule Converts double dashes to an emdash.\nexport const emDash = new InputRule(/--$/, \"—\")\n// :: InputRule Converts three dots to an ellipsis character.\nexport const ellipsis = new InputRule(/\\.\\.\\.$/, \"…\")\n// :: InputRule “Smart” opening double quotes.\nexport const openDoubleQuote = new InputRule(/(?:^|[\\s\\{\\[\\(\\<'\"\\u2018\\u201C])(\")$/, \"“\")\n// :: InputRule “Smart” closing double quotes.\nexport const closeDoubleQuote = new InputRule(/\"$/, \"”\")\n// :: InputRule “Smart” opening single quotes.\nexport const openSingleQuote = new InputRule(/(?:^|[\\s\\{\\[\\(\\<'\"\\u2018\\u201C])(')$/, \"‘\")\n// :: InputRule “Smart” closing single quotes.\nexport const closeSingleQuote = new InputRule(/'$/, \"’\")\n\n// :: [InputRule] Smart-quote related input rules.\nexport const smartQuotes = [openDoubleQuote, closeDoubleQuote, openSingleQuote, closeSingleQuote]\n","import {InputRule} from \"./inputrules\"\nimport {findWrapping, canJoin} from \"prosemirror-transform\"\n\n// :: (RegExp, NodeType, ?union<Object, ([string]) → ?Object>, ?([string], Node) → bool) → InputRule\n// Build an input rule for automatically wrapping a textblock when a\n// given string is typed. The `regexp` argument is\n// directly passed through to the `InputRule` constructor. You'll\n// probably want the regexp to start with `^`, so that the pattern can\n// only occur at the start of a textblock.\n//\n// `nodeType` is the type of node to wrap in. If it needs attributes,\n// you can either pass them directly, or pass a function that will\n// compute them from the regular expression match.\n//\n// By default, if there's a node with the same type above the newly\n// wrapped node, the rule will try to [join](#transform.Transform.join) those\n// two nodes. You can pass a join predicate, which takes a regular\n// expression match and the node before the wrapped node, and can\n// return a boolean to indicate whether a join should happen.\nexport function wrappingInputRule(regexp, nodeType, getAttrs, joinPredicate) {\n  return new InputRule(regexp, (state, match, start, end) => {\n    let attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs\n    let tr = state.tr.delete(start, end)\n    let $start = tr.doc.resolve(start), range = $start.blockRange(), wrapping = range && findWrapping(range, nodeType, attrs)\n    if (!wrapping) return null\n    tr.wrap(range, wrapping)\n    let before = tr.doc.resolve(start - 1).nodeBefore\n    if (before && before.type == nodeType && canJoin(tr.doc, start - 1) &&\n        (!joinPredicate || joinPredicate(match, before)))\n      tr.join(start - 1)\n    return tr\n  })\n}\n\n// :: (RegExp, NodeType, ?union<Object, ([string]) → ?Object>) → InputRule\n// Build an input rule that changes the type of a textblock when the\n// matched text is typed into it. You'll usually want to start your\n// regexp with `^` to that it is only matched at the start of a\n// textblock. The optional `getAttrs` parameter can be used to compute\n// the new node's attributes, and works the same as in the\n// `wrappingInputRule` function.\nexport function textblockTypeInputRule(regexp, nodeType, getAttrs) {\n  return new InputRule(regexp, (state, match, start, end) => {\n    let $start = state.doc.resolve(start)\n    let attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs\n    if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), nodeType)) return null\n    return state.tr\n      .delete(start, end)\n      .setBlockType(start, start, nodeType, attrs)\n  })\n}\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Directives/Tooltip\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Directives/Tooltip\"] = factory();\n\telse\n\t\troot[\"NextcloudVue\"] = root[\"NextcloudVue\"] || {}, root[\"NextcloudVue\"][\"Directives/Tooltip\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/dist/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 19);\n","\"use strict\";\n\n/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n  var list = []; // return the list of modules as css string\n\n  list.toString = function toString() {\n    return this.map(function (item) {\n      var content = cssWithMappingToString(item, useSourceMap);\n\n      if (item[2]) {\n        return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n      }\n\n      return content;\n    }).join('');\n  }; // import a list of modules into the list\n  // eslint-disable-next-line func-names\n\n\n  list.i = function (modules, mediaQuery, dedupe) {\n    if (typeof modules === 'string') {\n      // eslint-disable-next-line no-param-reassign\n      modules = [[null, modules, '']];\n    }\n\n    var alreadyImportedModules = {};\n\n    if (dedupe) {\n      for (var i = 0; i < this.length; i++) {\n        // eslint-disable-next-line prefer-destructuring\n        var id = this[i][0];\n\n        if (id != null) {\n          alreadyImportedModules[id] = true;\n        }\n      }\n    }\n\n    for (var _i = 0; _i < modules.length; _i++) {\n      var item = [].concat(modules[_i]);\n\n      if (dedupe && alreadyImportedModules[item[0]]) {\n        // eslint-disable-next-line no-continue\n        continue;\n      }\n\n      if (mediaQuery) {\n        if (!item[2]) {\n          item[2] = mediaQuery;\n        } else {\n          item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n        }\n      }\n\n      list.push(item);\n    }\n  };\n\n  return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n  var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n  var cssMapping = item[3];\n\n  if (!cssMapping) {\n    return content;\n  }\n\n  if (useSourceMap && typeof btoa === 'function') {\n    var sourceMapping = toComment(cssMapping);\n    var sourceURLs = cssMapping.sources.map(function (source) {\n      return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n    });\n    return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n  }\n\n  return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n  // eslint-disable-next-line no-undef\n  var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n  var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n  return \"/*# \".concat(data, \" */\");\n}","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { VTooltip } from 'v-tooltip'\nimport './index.scss'\n\n// force scope the tooltip and use .vue-tooltip\n// instead of .tooltip to avoid server compatibility\n// issues and the use of !important\nVTooltip.options.defaultTemplate = `<div class=\"vue-tooltip\" role=\"tooltip\" data-v-${SCOPE_VERSION}><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>`\nVTooltip.options.defaultHtml = false\n\nexport default VTooltip\n","/**\n * Translates the list format produced by css-loader into something\n * easier to manipulate.\n */\nexport default function listToStyles (parentId, list) {\n  var styles = []\n  var newStyles = {}\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i]\n    var id = item[0]\n    var css = item[1]\n    var media = item[2]\n    var sourceMap = item[3]\n    var part = {\n      id: parentId + ':' + i,\n      css: css,\n      media: media,\n      sourceMap: sourceMap\n    }\n    if (!newStyles[id]) {\n      styles.push(newStyles[id] = { id: id, parts: [part] })\n    } else {\n      newStyles[id].parts.push(part)\n    }\n  }\n  return styles\n}\n","/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n  Modified by Evan You @yyx990803\n*/\n\nimport listToStyles from './listToStyles'\n\nvar hasDocument = typeof document !== 'undefined'\n\nif (typeof DEBUG !== 'undefined' && DEBUG) {\n  if (!hasDocument) {\n    throw new Error(\n    'vue-style-loader cannot be used in a non-browser environment. ' +\n    \"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\"\n  ) }\n}\n\n/*\ntype StyleObject = {\n  id: number;\n  parts: Array<StyleObjectPart>\n}\n\ntype StyleObjectPart = {\n  css: string;\n  media: string;\n  sourceMap: ?string\n}\n*/\n\nvar stylesInDom = {/*\n  [id: number]: {\n    id: number,\n    refs: number,\n    parts: Array<(obj?: StyleObjectPart) => void>\n  }\n*/}\n\nvar head = hasDocument && (document.head || document.getElementsByTagName('head')[0])\nvar singletonElement = null\nvar singletonCounter = 0\nvar isProduction = false\nvar noop = function () {}\nvar options = null\nvar ssrIdKey = 'data-vue-ssr-id'\n\n// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n// tags it will allow on a page\nvar isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\\b/.test(navigator.userAgent.toLowerCase())\n\nexport default function addStylesClient (parentId, list, _isProduction, _options) {\n  isProduction = _isProduction\n\n  options = _options || {}\n\n  var styles = listToStyles(parentId, list)\n  addStylesToDom(styles)\n\n  return function update (newList) {\n    var mayRemove = []\n    for (var i = 0; i < styles.length; i++) {\n      var item = styles[i]\n      var domStyle = stylesInDom[item.id]\n      domStyle.refs--\n      mayRemove.push(domStyle)\n    }\n    if (newList) {\n      styles = listToStyles(parentId, newList)\n      addStylesToDom(styles)\n    } else {\n      styles = []\n    }\n    for (var i = 0; i < mayRemove.length; i++) {\n      var domStyle = mayRemove[i]\n      if (domStyle.refs === 0) {\n        for (var j = 0; j < domStyle.parts.length; j++) {\n          domStyle.parts[j]()\n        }\n        delete stylesInDom[domStyle.id]\n      }\n    }\n  }\n}\n\nfunction addStylesToDom (styles /* Array<StyleObject> */) {\n  for (var i = 0; i < styles.length; i++) {\n    var item = styles[i]\n    var domStyle = stylesInDom[item.id]\n    if (domStyle) {\n      domStyle.refs++\n      for (var j = 0; j < domStyle.parts.length; j++) {\n        domStyle.parts[j](item.parts[j])\n      }\n      for (; j < item.parts.length; j++) {\n        domStyle.parts.push(addStyle(item.parts[j]))\n      }\n      if (domStyle.parts.length > item.parts.length) {\n        domStyle.parts.length = item.parts.length\n      }\n    } else {\n      var parts = []\n      for (var j = 0; j < item.parts.length; j++) {\n        parts.push(addStyle(item.parts[j]))\n      }\n      stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }\n    }\n  }\n}\n\nfunction createStyleElement () {\n  var styleElement = document.createElement('style')\n  styleElement.type = 'text/css'\n  head.appendChild(styleElement)\n  return styleElement\n}\n\nfunction addStyle (obj /* StyleObjectPart */) {\n  var update, remove\n  var styleElement = document.querySelector('style[' + ssrIdKey + '~=\"' + obj.id + '\"]')\n\n  if (styleElement) {\n    if (isProduction) {\n      // has SSR styles and in production mode.\n      // simply do nothing.\n      return noop\n    } else {\n      // has SSR styles but in dev mode.\n      // for some reason Chrome can't handle source map in server-rendered\n      // style tags - source maps in <style> only works if the style tag is\n      // created and inserted dynamically. So we remove the server rendered\n      // styles and inject new ones.\n      styleElement.parentNode.removeChild(styleElement)\n    }\n  }\n\n  if (isOldIE) {\n    // use singleton mode for IE9.\n    var styleIndex = singletonCounter++\n    styleElement = singletonElement || (singletonElement = createStyleElement())\n    update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)\n    remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)\n  } else {\n    // use multi-style-tag mode in all other cases\n    styleElement = createStyleElement()\n    update = applyToTag.bind(null, styleElement)\n    remove = function () {\n      styleElement.parentNode.removeChild(styleElement)\n    }\n  }\n\n  update(obj)\n\n  return function updateStyle (newObj /* StyleObjectPart */) {\n    if (newObj) {\n      if (newObj.css === obj.css &&\n          newObj.media === obj.media &&\n          newObj.sourceMap === obj.sourceMap) {\n        return\n      }\n      update(obj = newObj)\n    } else {\n      remove()\n    }\n  }\n}\n\nvar replaceText = (function () {\n  var textStore = []\n\n  return function (index, replacement) {\n    textStore[index] = replacement\n    return textStore.filter(Boolean).join('\\n')\n  }\n})()\n\nfunction applyToSingletonTag (styleElement, index, remove, obj) {\n  var css = remove ? '' : obj.css\n\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = replaceText(index, css)\n  } else {\n    var cssNode = document.createTextNode(css)\n    var childNodes = styleElement.childNodes\n    if (childNodes[index]) styleElement.removeChild(childNodes[index])\n    if (childNodes.length) {\n      styleElement.insertBefore(cssNode, childNodes[index])\n    } else {\n      styleElement.appendChild(cssNode)\n    }\n  }\n}\n\nfunction applyToTag (styleElement, obj) {\n  var css = obj.css\n  var media = obj.media\n  var sourceMap = obj.sourceMap\n\n  if (media) {\n    styleElement.setAttribute('media', media)\n  }\n  if (options.ssrId) {\n    styleElement.setAttribute(ssrIdKey, obj.id)\n  }\n\n  if (sourceMap) {\n    // https://developer.chrome.com/devtools/docs/javascript-debugging\n    // this makes source maps inside style tags work properly in Chrome\n    css += '\\n/*# sourceURL=' + sourceMap.sources[0] + ' */'\n    // http://stackoverflow.com/a/26603875\n    css += '\\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'\n  }\n\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = css\n  } else {\n    while (styleElement.firstChild) {\n      styleElement.removeChild(styleElement.firstChild)\n    }\n    styleElement.appendChild(document.createTextNode(css))\n  }\n}\n","module.exports = require(\"v-tooltip\");","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/resolve-url-loader/index.js!../../../node_modules/sass-loader/dist/cjs.js??ref--1-3!./index.scss\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"941c791e\", content, true, {});","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".vue-tooltip[data-v-6f23729]{position:absolute;z-index:100000;right:auto;left:auto;display:block;margin:0;margin-top:-3px;padding:10px 0;text-align:left;text-align:start;opacity:0;line-height:1.6;line-break:auto;filter:drop-shadow(0 1px 10px var(--color-box-shadow))}.vue-tooltip[data-v-6f23729][x-placement^='top'] .tooltip-arrow{bottom:0;margin-top:0;margin-bottom:0;border-width:10px 10px 0 10px;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}.vue-tooltip[data-v-6f23729][x-placement^='bottom'] .tooltip-arrow{top:0;margin-top:0;margin-bottom:0;border-width:0 10px 10px 10px;border-top-color:transparent;border-right-color:transparent;border-left-color:transparent}.vue-tooltip[data-v-6f23729][x-placement^='right'] .tooltip-arrow{right:100%;margin-right:0;margin-left:0;border-width:10px 10px 10px 0;border-top-color:transparent;border-bottom-color:transparent;border-left-color:transparent}.vue-tooltip[data-v-6f23729][x-placement^='left'] .tooltip-arrow{left:100%;margin-right:0;margin-left:0;border-width:10px 0 10px 10px;border-top-color:transparent;border-right-color:transparent;border-bottom-color:transparent}.vue-tooltip[data-v-6f23729][aria-hidden='true']{visibility:hidden;transition:opacity .15s, visibility .15s;opacity:0}.vue-tooltip[data-v-6f23729][aria-hidden='false']{visibility:visible;transition:opacity .15s;opacity:1}.vue-tooltip[data-v-6f23729] .tooltip-inner{max-width:350px;padding:5px 8px;text-align:center;color:var(--color-main-text);border-radius:var(--border-radius);background-color:var(--color-main-background)}.vue-tooltip[data-v-6f23729] .tooltip-arrow{position:absolute;z-index:1;width:0;height:0;margin:0;border-style:solid;border-color:var(--color-main-background)}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var GOOD_LEAF_SIZE = 200;\n\n// :: class<T> A rope sequence is a persistent sequence data structure\n// that supports appending, prepending, and slicing without doing a\n// full copy. It is represented as a mostly-balanced tree.\nvar RopeSequence = function RopeSequence () {};\n\nRopeSequence.prototype.append = function append (other) {\n  if (!other.length) { return this }\n  other = RopeSequence.from(other);\n\n  return (!this.length && other) ||\n    (other.length < GOOD_LEAF_SIZE && this.leafAppend(other)) ||\n    (this.length < GOOD_LEAF_SIZE && other.leafPrepend(this)) ||\n    this.appendInner(other)\n};\n\n// :: (union<[T], RopeSequence<T>>) → RopeSequence<T>\n// Prepend an array or other rope to this one, returning a new rope.\nRopeSequence.prototype.prepend = function prepend (other) {\n  if (!other.length) { return this }\n  return RopeSequence.from(other).append(this)\n};\n\nRopeSequence.prototype.appendInner = function appendInner (other) {\n  return new Append(this, other)\n};\n\n// :: (?number, ?number) → RopeSequence<T>\n// Create a rope repesenting a sub-sequence of this rope.\nRopeSequence.prototype.slice = function slice (from, to) {\n    if ( from === void 0 ) from = 0;\n    if ( to === void 0 ) to = this.length;\n\n  if (from >= to) { return RopeSequence.empty }\n  return this.sliceInner(Math.max(0, from), Math.min(this.length, to))\n};\n\n// :: (number) → T\n// Retrieve the element at the given position from this rope.\nRopeSequence.prototype.get = function get (i) {\n  if (i < 0 || i >= this.length) { return undefined }\n  return this.getInner(i)\n};\n\n// :: ((element: T, index: number) → ?bool, ?number, ?number)\n// Call the given function for each element between the given\n// indices. This tends to be more efficient than looping over the\n// indices and calling `get`, because it doesn't have to descend the\n// tree for every element.\nRopeSequence.prototype.forEach = function forEach (f, from, to) {\n    if ( from === void 0 ) from = 0;\n    if ( to === void 0 ) to = this.length;\n\n  if (from <= to)\n    { this.forEachInner(f, from, to, 0); }\n  else\n    { this.forEachInvertedInner(f, from, to, 0); }\n};\n\n// :: ((element: T, index: number) → U, ?number, ?number) → [U]\n// Map the given functions over the elements of the rope, producing\n// a flat array.\nRopeSequence.prototype.map = function map (f, from, to) {\n    if ( from === void 0 ) from = 0;\n    if ( to === void 0 ) to = this.length;\n\n  var result = [];\n  this.forEach(function (elt, i) { return result.push(f(elt, i)); }, from, to);\n  return result\n};\n\n// :: (?union<[T], RopeSequence<T>>) → RopeSequence<T>\n// Create a rope representing the given array, or return the rope\n// itself if a rope was given.\nRopeSequence.from = function from (values) {\n  if (values instanceof RopeSequence) { return values }\n  return values && values.length ? new Leaf(values) : RopeSequence.empty\n};\n\nvar Leaf = /*@__PURE__*/(function (RopeSequence) {\n  function Leaf(values) {\n    RopeSequence.call(this);\n    this.values = values;\n  }\n\n  if ( RopeSequence ) Leaf.__proto__ = RopeSequence;\n  Leaf.prototype = Object.create( RopeSequence && RopeSequence.prototype );\n  Leaf.prototype.constructor = Leaf;\n\n  var prototypeAccessors = { length: { configurable: true },depth: { configurable: true } };\n\n  Leaf.prototype.flatten = function flatten () {\n    return this.values\n  };\n\n  Leaf.prototype.sliceInner = function sliceInner (from, to) {\n    if (from == 0 && to == this.length) { return this }\n    return new Leaf(this.values.slice(from, to))\n  };\n\n  Leaf.prototype.getInner = function getInner (i) {\n    return this.values[i]\n  };\n\n  Leaf.prototype.forEachInner = function forEachInner (f, from, to, start) {\n    for (var i = from; i < to; i++)\n      { if (f(this.values[i], start + i) === false) { return false } }\n  };\n\n  Leaf.prototype.forEachInvertedInner = function forEachInvertedInner (f, from, to, start) {\n    for (var i = from - 1; i >= to; i--)\n      { if (f(this.values[i], start + i) === false) { return false } }\n  };\n\n  Leaf.prototype.leafAppend = function leafAppend (other) {\n    if (this.length + other.length <= GOOD_LEAF_SIZE)\n      { return new Leaf(this.values.concat(other.flatten())) }\n  };\n\n  Leaf.prototype.leafPrepend = function leafPrepend (other) {\n    if (this.length + other.length <= GOOD_LEAF_SIZE)\n      { return new Leaf(other.flatten().concat(this.values)) }\n  };\n\n  prototypeAccessors.length.get = function () { return this.values.length };\n\n  prototypeAccessors.depth.get = function () { return 0 };\n\n  Object.defineProperties( Leaf.prototype, prototypeAccessors );\n\n  return Leaf;\n}(RopeSequence));\n\n// :: RopeSequence\n// The empty rope sequence.\nRopeSequence.empty = new Leaf([]);\n\nvar Append = /*@__PURE__*/(function (RopeSequence) {\n  function Append(left, right) {\n    RopeSequence.call(this);\n    this.left = left;\n    this.right = right;\n    this.length = left.length + right.length;\n    this.depth = Math.max(left.depth, right.depth) + 1;\n  }\n\n  if ( RopeSequence ) Append.__proto__ = RopeSequence;\n  Append.prototype = Object.create( RopeSequence && RopeSequence.prototype );\n  Append.prototype.constructor = Append;\n\n  Append.prototype.flatten = function flatten () {\n    return this.left.flatten().concat(this.right.flatten())\n  };\n\n  Append.prototype.getInner = function getInner (i) {\n    return i < this.left.length ? this.left.get(i) : this.right.get(i - this.left.length)\n  };\n\n  Append.prototype.forEachInner = function forEachInner (f, from, to, start) {\n    var leftLen = this.left.length;\n    if (from < leftLen &&\n        this.left.forEachInner(f, from, Math.min(to, leftLen), start) === false)\n      { return false }\n    if (to > leftLen &&\n        this.right.forEachInner(f, Math.max(from - leftLen, 0), Math.min(this.length, to) - leftLen, start + leftLen) === false)\n      { return false }\n  };\n\n  Append.prototype.forEachInvertedInner = function forEachInvertedInner (f, from, to, start) {\n    var leftLen = this.left.length;\n    if (from > leftLen &&\n        this.right.forEachInvertedInner(f, from - leftLen, Math.max(to, leftLen) - leftLen, start + leftLen) === false)\n      { return false }\n    if (to < leftLen &&\n        this.left.forEachInvertedInner(f, Math.min(from, leftLen), to, start) === false)\n      { return false }\n  };\n\n  Append.prototype.sliceInner = function sliceInner (from, to) {\n    if (from == 0 && to == this.length) { return this }\n    var leftLen = this.left.length;\n    if (to <= leftLen) { return this.left.slice(from, to) }\n    if (from >= leftLen) { return this.right.slice(from - leftLen, to - leftLen) }\n    return this.left.slice(from, leftLen).append(this.right.slice(0, to - leftLen))\n  };\n\n  Append.prototype.leafAppend = function leafAppend (other) {\n    var inner = this.right.leafAppend(other);\n    if (inner) { return new Append(this.left, inner) }\n  };\n\n  Append.prototype.leafPrepend = function leafPrepend (other) {\n    var inner = this.left.leafPrepend(other);\n    if (inner) { return new Append(inner, this.right) }\n  };\n\n  Append.prototype.appendInner = function appendInner (other) {\n    if (this.left.depth >= Math.max(this.right.depth, other.depth) + 1)\n      { return new Append(this.left, new Append(this.right, other)) }\n    return new Append(this, other)\n  };\n\n  return Append;\n}(RopeSequence));\n\nvar ropeSequence = RopeSequence;\n\nexport default ropeSequence;\n","import RopeSequence from \"rope-sequence\"\nimport {Mapping} from \"prosemirror-transform\"\nimport {Plugin, PluginKey} from \"prosemirror-state\"\n\n// ProseMirror's history isn't simply a way to roll back to a previous\n// state, because ProseMirror supports applying changes without adding\n// them to the history (for example during collaboration).\n//\n// To this end, each 'Branch' (one for the undo history and one for\n// the redo history) keeps an array of 'Items', which can optionally\n// hold a step (an actual undoable change), and always hold a position\n// map (which is needed to move changes below them to apply to the\n// current document).\n//\n// An item that has both a step and a selection bookmark is the start\n// of an 'event' — a group of changes that will be undone or redone at\n// once. (It stores only the bookmark, since that way we don't have to\n// provide a document until the selection is actually applied, which\n// is useful when compressing.)\n\n// Used to schedule history compression\nconst max_empty_items = 500\n\nclass Branch {\n  constructor(items, eventCount) {\n    this.items = items\n    this.eventCount = eventCount\n  }\n\n  // : (EditorState, bool) → ?{transform: Transform, selection: ?SelectionBookmark, remaining: Branch}\n  // Pop the latest event off the branch's history and apply it\n  // to a document transform.\n  popEvent(state, preserveItems) {\n    if (this.eventCount == 0) return null\n\n    let end = this.items.length\n    for (;; end--) {\n      let next = this.items.get(end - 1)\n      if (next.selection) { --end; break }\n    }\n\n    let remap, mapFrom\n    if (preserveItems) {\n      remap = this.remapping(end, this.items.length)\n      mapFrom = remap.maps.length\n    }\n    let transform = state.tr\n    let selection, remaining\n    let addAfter = [], addBefore = []\n\n    this.items.forEach((item, i) => {\n      if (!item.step) {\n        if (!remap) {\n          remap = this.remapping(end, i + 1)\n          mapFrom = remap.maps.length\n        }\n        mapFrom--\n        addBefore.push(item)\n        return\n      }\n\n      if (remap) {\n        addBefore.push(new Item(item.map))\n        let step = item.step.map(remap.slice(mapFrom)), map\n\n        if (step && transform.maybeStep(step).doc) {\n          map = transform.mapping.maps[transform.mapping.maps.length - 1]\n          addAfter.push(new Item(map, null, null, addAfter.length + addBefore.length))\n        }\n        mapFrom--\n        if (map) remap.appendMap(map, mapFrom)\n      } else {\n        transform.maybeStep(item.step)\n      }\n\n      if (item.selection) {\n        selection = remap ? item.selection.map(remap.slice(mapFrom)) : item.selection\n        remaining = new Branch(this.items.slice(0, end).append(addBefore.reverse().concat(addAfter)), this.eventCount - 1)\n        return false\n      }\n    }, this.items.length, 0)\n\n    return {remaining, transform, selection}\n  }\n\n  // : (Transform, ?SelectionBookmark, Object) → Branch\n  // Create a new branch with the given transform added.\n  addTransform(transform, selection, histOptions, preserveItems) {\n    let newItems = [], eventCount = this.eventCount\n    let oldItems = this.items, lastItem = !preserveItems && oldItems.length ? oldItems.get(oldItems.length - 1) : null\n\n    for (let i = 0; i < transform.steps.length; i++) {\n      let step = transform.steps[i].invert(transform.docs[i])\n      let item = new Item(transform.mapping.maps[i], step, selection), merged\n      if (merged = lastItem && lastItem.merge(item)) {\n        item = merged\n        if (i) newItems.pop()\n        else oldItems = oldItems.slice(0, oldItems.length - 1)\n      }\n      newItems.push(item)\n      if (selection) {\n        eventCount++\n        selection = null\n      }\n      if (!preserveItems) lastItem = item\n    }\n    let overflow = eventCount - histOptions.depth\n    if (overflow > DEPTH_OVERFLOW) {\n      oldItems = cutOffEvents(oldItems, overflow)\n      eventCount -= overflow\n    }\n    return new Branch(oldItems.append(newItems), eventCount)\n  }\n\n  remapping(from, to) {\n    let maps = new Mapping\n    this.items.forEach((item, i) => {\n      let mirrorPos = item.mirrorOffset != null && i - item.mirrorOffset >= from\n          ? maps.maps.length - item.mirrorOffset : null\n      maps.appendMap(item.map, mirrorPos)\n    }, from, to)\n    return maps\n  }\n\n  addMaps(array) {\n    if (this.eventCount == 0) return this\n    return new Branch(this.items.append(array.map(map => new Item(map))), this.eventCount)\n  }\n\n  // : (Transform, number)\n  // When the collab module receives remote changes, the history has\n  // to know about those, so that it can adjust the steps that were\n  // rebased on top of the remote changes, and include the position\n  // maps for the remote changes in its array of items.\n  rebased(rebasedTransform, rebasedCount) {\n    if (!this.eventCount) return this\n\n    let rebasedItems = [], start = Math.max(0, this.items.length - rebasedCount)\n\n    let mapping = rebasedTransform.mapping\n    let newUntil = rebasedTransform.steps.length\n    let eventCount = this.eventCount\n    this.items.forEach(item => { if (item.selection) eventCount-- }, start)\n\n    let iRebased = rebasedCount\n    this.items.forEach(item => {\n      let pos = mapping.getMirror(--iRebased)\n      if (pos == null) return\n      newUntil = Math.min(newUntil, pos)\n      let map = mapping.maps[pos]\n      if (item.step) {\n        let step = rebasedTransform.steps[pos].invert(rebasedTransform.docs[pos])\n        let selection = item.selection && item.selection.map(mapping.slice(iRebased + 1, pos))\n        if (selection) eventCount++\n        rebasedItems.push(new Item(map, step, selection))\n      } else {\n        rebasedItems.push(new Item(map))\n      }\n    }, start)\n\n    let newMaps = []\n    for (let i = rebasedCount; i < newUntil; i++)\n      newMaps.push(new Item(mapping.maps[i]))\n    let items = this.items.slice(0, start).append(newMaps).append(rebasedItems)\n    let branch = new Branch(items, eventCount)\n\n    if (branch.emptyItemCount() > max_empty_items)\n      branch = branch.compress(this.items.length - rebasedItems.length)\n    return branch\n  }\n\n  emptyItemCount() {\n    let count = 0\n    this.items.forEach(item => { if (!item.step) count++ })\n    return count\n  }\n\n  // Compressing a branch means rewriting it to push the air (map-only\n  // items) out. During collaboration, these naturally accumulate\n  // because each remote change adds one. The `upto` argument is used\n  // to ensure that only the items below a given level are compressed,\n  // because `rebased` relies on a clean, untouched set of items in\n  // order to associate old items with rebased steps.\n  compress(upto = this.items.length) {\n    let remap = this.remapping(0, upto), mapFrom = remap.maps.length\n    let items = [], events = 0\n    this.items.forEach((item, i) => {\n      if (i >= upto) {\n        items.push(item)\n        if (item.selection) events++\n      } else if (item.step) {\n        let step = item.step.map(remap.slice(mapFrom)), map = step && step.getMap()\n        mapFrom--\n        if (map) remap.appendMap(map, mapFrom)\n        if (step) {\n          let selection = item.selection && item.selection.map(remap.slice(mapFrom))\n          if (selection) events++\n          let newItem = new Item(map.invert(), step, selection), merged, last = items.length - 1\n          if (merged = items.length && items[last].merge(newItem))\n            items[last] = merged\n          else\n            items.push(newItem)\n        }\n      } else if (item.map) {\n        mapFrom--\n      }\n    }, this.items.length, 0)\n    return new Branch(RopeSequence.from(items.reverse()), events)\n  }\n}\n\nBranch.empty = new Branch(RopeSequence.empty, 0)\n\nfunction cutOffEvents(items, n) {\n  let cutPoint\n  items.forEach((item, i) => {\n    if (item.selection && (n-- == 0)) {\n      cutPoint = i\n      return false\n    }\n  })\n  return items.slice(cutPoint)\n}\n\nclass Item {\n  constructor(map, step, selection, mirrorOffset) {\n    // The (forward) step map for this item.\n    this.map = map\n    // The inverted step\n    this.step = step\n    // If this is non-null, this item is the start of a group, and\n    // this selection is the starting selection for the group (the one\n    // that was active before the first step was applied)\n    this.selection = selection\n    // If this item is the inverse of a previous mapping on the stack,\n    // this points at the inverse's offset\n    this.mirrorOffset = mirrorOffset\n  }\n\n  merge(other) {\n    if (this.step && other.step && !other.selection) {\n      let step = other.step.merge(this.step)\n      if (step) return new Item(step.getMap().invert(), step, this.selection)\n    }\n  }\n}\n\n// The value of the state field that tracks undo/redo history for that\n// state. Will be stored in the plugin state when the history plugin\n// is active.\nexport class HistoryState {\n  constructor(done, undone, prevRanges, prevTime) {\n    this.done = done\n    this.undone = undone\n    this.prevRanges = prevRanges\n    this.prevTime = prevTime\n  }\n}\n\nconst DEPTH_OVERFLOW = 20\n\n// : (HistoryState, EditorState, Transaction, Object)\n// Record a transformation in undo history.\nfunction applyTransaction(history, state, tr, options) {\n  let historyTr = tr.getMeta(historyKey), rebased\n  if (historyTr) return historyTr.historyState\n\n  if (tr.getMeta(closeHistoryKey)) history = new HistoryState(history.done, history.undone, null, 0)\n\n  let appended = tr.getMeta(\"appendedTransaction\")\n\n  if (tr.steps.length == 0) {\n    return history\n  } else if (appended && appended.getMeta(historyKey)) {\n    if (appended.getMeta(historyKey).redo)\n      return new HistoryState(history.done.addTransform(tr, null, options, mustPreserveItems(state)),\n                              history.undone, rangesFor(tr.mapping.maps[tr.steps.length - 1]), history.prevTime)\n    else\n      return new HistoryState(history.done, history.undone.addTransform(tr, null, options, mustPreserveItems(state)),\n                              null, history.prevTime)\n  } else if (tr.getMeta(\"addToHistory\") !== false && !(appended && appended.getMeta(\"addToHistory\") === false)) {\n    // Group transforms that occur in quick succession into one event.\n    let newGroup = history.prevTime == 0 || !appended && (history.prevTime < (tr.time || 0) - options.newGroupDelay ||\n                                                          !isAdjacentTo(tr, history.prevRanges))\n    let prevRanges = appended ? mapRanges(history.prevRanges, tr.mapping) : rangesFor(tr.mapping.maps[tr.steps.length - 1])\n    return new HistoryState(history.done.addTransform(tr, newGroup ? state.selection.getBookmark() : null,\n                                                      options, mustPreserveItems(state)),\n                            Branch.empty, prevRanges, tr.time)\n  } else if (rebased = tr.getMeta(\"rebased\")) {\n    // Used by the collab module to tell the history that some of its\n    // content has been rebased.\n    return new HistoryState(history.done.rebased(tr, rebased),\n                            history.undone.rebased(tr, rebased),\n                            mapRanges(history.prevRanges, tr.mapping), history.prevTime)\n  } else {\n    return new HistoryState(history.done.addMaps(tr.mapping.maps),\n                            history.undone.addMaps(tr.mapping.maps),\n                            mapRanges(history.prevRanges, tr.mapping), history.prevTime)\n  }\n}\n\nfunction isAdjacentTo(transform, prevRanges) {\n  if (!prevRanges) return false\n  if (!transform.docChanged) return true\n  let adjacent = false\n  transform.mapping.maps[0].forEach((start, end) => {\n    for (let i = 0; i < prevRanges.length; i += 2)\n      if (start <= prevRanges[i + 1] && end >= prevRanges[i])\n        adjacent = true\n  })\n  return adjacent\n}\n\nfunction rangesFor(map) {\n  let result = []\n  map.forEach((_from, _to, from, to) => result.push(from, to))\n  return result\n}\n\nfunction mapRanges(ranges, mapping) {\n  if (!ranges) return null\n  let result = []\n  for (let i = 0; i < ranges.length; i += 2) {\n    let from = mapping.map(ranges[i], 1), to = mapping.map(ranges[i + 1], -1)\n    if (from <= to) result.push(from, to)\n  }\n  return result\n}\n\n// : (HistoryState, EditorState, (tr: Transaction), bool)\n// Apply the latest event from one branch to the document and shift the event\n// onto the other branch.\nfunction histTransaction(history, state, dispatch, redo) {\n  let preserveItems = mustPreserveItems(state), histOptions = historyKey.get(state).spec.config\n  let pop = (redo ? history.undone : history.done).popEvent(state, preserveItems)\n  if (!pop) return\n\n  let selection = pop.selection.resolve(pop.transform.doc)\n  let added = (redo ? history.done : history.undone).addTransform(pop.transform, state.selection.getBookmark(),\n                                                                  histOptions, preserveItems)\n\n  let newHist = new HistoryState(redo ? added : pop.remaining, redo ? pop.remaining : added, null, 0)\n  dispatch(pop.transform.setSelection(selection).setMeta(historyKey, {redo, historyState: newHist}).scrollIntoView())\n}\n\nlet cachedPreserveItems = false, cachedPreserveItemsPlugins = null\n// Check whether any plugin in the given state has a\n// `historyPreserveItems` property in its spec, in which case we must\n// preserve steps exactly as they came in, so that they can be\n// rebased.\nfunction mustPreserveItems(state) {\n  let plugins = state.plugins\n  if (cachedPreserveItemsPlugins != plugins) {\n    cachedPreserveItems = false\n    cachedPreserveItemsPlugins = plugins\n    for (let i = 0; i < plugins.length; i++) if (plugins[i].spec.historyPreserveItems) {\n      cachedPreserveItems = true\n      break\n    }\n  }\n  return cachedPreserveItems\n}\n\n// :: (Transaction) → Transaction\n// Set a flag on the given transaction that will prevent further steps\n// from being appended to an existing history event (so that they\n// require a separate undo command to undo).\nexport function closeHistory(tr) {\n  return tr.setMeta(closeHistoryKey, true)\n}\n\nconst historyKey = new PluginKey(\"history\")\nconst closeHistoryKey = new PluginKey(\"closeHistory\")\n\n// :: (?Object) → Plugin\n// Returns a plugin that enables the undo history for an editor. The\n// plugin will track undo and redo stacks, which can be used with the\n// [`undo`](#history.undo) and [`redo`](#history.redo) commands.\n//\n// You can set an `\"addToHistory\"` [metadata\n// property](#state.Transaction.setMeta) of `false` on a transaction\n// to prevent it from being rolled back by undo.\n//\n//   config::-\n//   Supports the following configuration options:\n//\n//     depth:: ?number\n//     The amount of history events that are collected before the\n//     oldest events are discarded. Defaults to 100.\n//\n//     newGroupDelay:: ?number\n//     The delay between changes after which a new group should be\n//     started. Defaults to 500 (milliseconds). Note that when changes\n//     aren't adjacent, a new group is always started.\nexport function history(config) {\n  config = {depth: config && config.depth || 100,\n            newGroupDelay: config && config.newGroupDelay || 500}\n  return new Plugin({\n    key: historyKey,\n\n    state: {\n      init() {\n        return new HistoryState(Branch.empty, Branch.empty, null, 0)\n      },\n      apply(tr, hist, state) {\n        return applyTransaction(hist, state, tr, config)\n      }\n    },\n\n    config\n  })\n}\n\n// :: (EditorState, ?(tr: Transaction)) → bool\n// A command function that undoes the last change, if any.\nexport function undo(state, dispatch) {\n  let hist = historyKey.getState(state)\n  if (!hist || hist.done.eventCount == 0) return false\n  if (dispatch) histTransaction(hist, state, dispatch, false)\n  return true\n}\n\n// :: (EditorState, ?(tr: Transaction)) → bool\n// A command function that redoes the last undone change, if any.\nexport function redo(state, dispatch) {\n  let hist = historyKey.getState(state)\n  if (!hist || hist.undone.eventCount == 0) return false\n  if (dispatch) histTransaction(hist, state, dispatch, true)\n  return true\n}\n\n// :: (EditorState) → number\n// The amount of undoable events available in a given state.\nexport function undoDepth(state) {\n  let hist = historyKey.getState(state)\n  return hist ? hist.done.eventCount : 0\n}\n\n// :: (EditorState) → number\n// The amount of redoable events available in a given editor state.\nexport function redoDepth(state) {\n  let hist = historyKey.getState(state)\n  return hist ? hist.undone.eventCount : 0\n}\n","\n    /*!\n    * tiptap-extensions v1.32.1\n    * (c) 2020 überdosis GbR (limited liability)\n    * @license MIT\n    */\n  \nimport { Node, Plugin, PluginKey, Mark, Extension } from 'tiptap';\nimport { toggleWrap, wrappingInputRule, toggleList, toggleBlockType, setBlockType, textblockTypeInputRule, chainCommands, exitCode, nodeInputRule, splitListItem, sinkListItem, liftListItem, insertText, replaceText, splitToDefaultListItem, toggleMark, markInputRule, markPasteRule, updateMark, removeMark, pasteRule } from 'tiptap-commands';\nimport low from 'lowlight/lib/core';\nimport { DecorationSet, Decoration } from 'prosemirror-view';\nimport { findBlockNodes, createTable } from 'prosemirror-utils';\nimport { Plugin as Plugin$1, PluginKey as PluginKey$1, TextSelection } from 'prosemirror-state';\nimport 'regenerator-runtime/runtime';\nimport { tableNodes, addColumnBefore, addColumnAfter, deleteColumn, addRowBefore, addRowAfter, deleteRow, deleteTable, mergeCells, splitCell, toggleHeaderColumn, toggleHeaderRow, toggleHeaderCell, setCellAttr, fixTables, goToNextCell, columnResizing, tableEditing } from 'prosemirror-tables';\nimport { getMarkAttrs, nodeEqualsType } from 'tiptap-utils';\nimport { Step } from 'prosemirror-transform';\nimport { sendableSteps, getVersion, receiveTransaction, collab } from 'prosemirror-collab';\nimport { undo, redo, undoDepth, redoDepth, history } from 'prosemirror-history';\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n  try {\n    var info = gen[key](arg);\n    var value = info.value;\n  } catch (error) {\n    reject(error);\n    return;\n  }\n\n  if (info.done) {\n    resolve(value);\n  } else {\n    Promise.resolve(value).then(_next, _throw);\n  }\n}\n\nfunction _asyncToGenerator(fn) {\n  return function () {\n    var self = this,\n        args = arguments;\n    return new Promise(function (resolve, reject) {\n      var gen = fn.apply(self, args);\n\n      function _next(value) {\n        asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n      }\n\n      function _throw(err) {\n        asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n      }\n\n      _next(undefined);\n    });\n  };\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n  if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n  if (Reflect.construct.sham) return false;\n  if (typeof Proxy === \"function\") return true;\n\n  try {\n    Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n\n  return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n  var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n  return function _createSuperInternal() {\n    var Super = _getPrototypeOf(Derived),\n        result;\n\n    if (hasNativeReflectConstruct) {\n      var NewTarget = _getPrototypeOf(this).constructor;\n\n      result = Reflect.construct(Super, arguments, NewTarget);\n    } else {\n      result = Super.apply(this, arguments);\n    }\n\n    return _possibleConstructorReturn(this, result);\n  };\n}\n\nfunction _slicedToArray(arr, i) {\n  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n  if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n  return arr2;\n}\n\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar Blockquote = /*#__PURE__*/function (_Node) {\n  _inherits(Blockquote, _Node);\n\n  var _super = _createSuper(Blockquote);\n\n  function Blockquote() {\n    _classCallCheck(this, Blockquote);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Blockquote, [{\n    key: \"commands\",\n    value: function commands(_ref) {\n      var type = _ref.type,\n          schema = _ref.schema;\n      return function () {\n        return toggleWrap(type, schema.nodes.paragraph);\n      };\n    }\n  }, {\n    key: \"keys\",\n    value: function keys(_ref2) {\n      var type = _ref2.type;\n      return {\n        'Ctrl->': toggleWrap(type)\n      };\n    }\n  }, {\n    key: \"inputRules\",\n    value: function inputRules(_ref3) {\n      var type = _ref3.type;\n      return [wrappingInputRule(/^\\s*>\\s$/, type)];\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'blockquote';\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return {\n        content: 'block*',\n        group: 'block',\n        defining: true,\n        draggable: false,\n        parseDOM: [{\n          tag: 'blockquote'\n        }],\n        toDOM: function toDOM() {\n          return ['blockquote', 0];\n        }\n      };\n    }\n  }]);\n\n  return Blockquote;\n}(Node);\n\nvar BulletList = /*#__PURE__*/function (_Node) {\n  _inherits(BulletList, _Node);\n\n  var _super = _createSuper(BulletList);\n\n  function BulletList() {\n    _classCallCheck(this, BulletList);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(BulletList, [{\n    key: \"commands\",\n    value: function commands(_ref) {\n      var type = _ref.type,\n          schema = _ref.schema;\n      return function () {\n        return toggleList(type, schema.nodes.list_item);\n      };\n    }\n  }, {\n    key: \"keys\",\n    value: function keys(_ref2) {\n      var type = _ref2.type,\n          schema = _ref2.schema;\n      return {\n        'Shift-Ctrl-8': toggleList(type, schema.nodes.list_item)\n      };\n    }\n  }, {\n    key: \"inputRules\",\n    value: function inputRules(_ref3) {\n      var type = _ref3.type;\n      return [wrappingInputRule(/^\\s*([-+*])\\s$/, type)];\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'bullet_list';\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return {\n        content: 'list_item+',\n        group: 'block',\n        parseDOM: [{\n          tag: 'ul'\n        }],\n        toDOM: function toDOM() {\n          return ['ul', 0];\n        }\n      };\n    }\n  }]);\n\n  return BulletList;\n}(Node);\n\nvar CodeBlock = /*#__PURE__*/function (_Node) {\n  _inherits(CodeBlock, _Node);\n\n  var _super = _createSuper(CodeBlock);\n\n  function CodeBlock() {\n    _classCallCheck(this, CodeBlock);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(CodeBlock, [{\n    key: \"commands\",\n    value: function commands(_ref) {\n      var type = _ref.type,\n          schema = _ref.schema;\n      return function () {\n        return toggleBlockType(type, schema.nodes.paragraph);\n      };\n    }\n  }, {\n    key: \"keys\",\n    value: function keys(_ref2) {\n      var type = _ref2.type;\n      return {\n        'Shift-Ctrl-\\\\': setBlockType(type)\n      };\n    }\n  }, {\n    key: \"inputRules\",\n    value: function inputRules(_ref3) {\n      var type = _ref3.type;\n      return [textblockTypeInputRule(/^```$/, type)];\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'code_block';\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return {\n        content: 'text*',\n        marks: '',\n        group: 'block',\n        code: true,\n        defining: true,\n        draggable: false,\n        parseDOM: [{\n          tag: 'pre',\n          preserveWhitespace: 'full'\n        }],\n        toDOM: function toDOM() {\n          return ['pre', ['code', 0]];\n        }\n      };\n    }\n  }]);\n\n  return CodeBlock;\n}(Node);\n\nfunction getDecorations(_ref) {\n  var doc = _ref.doc,\n      name = _ref.name;\n  var decorations = [];\n  var blocks = findBlockNodes(doc).filter(function (item) {\n    return item.node.type.name === name;\n  });\n\n  var flatten = function flatten(list) {\n    return list.reduce(function (a, b) {\n      return a.concat(Array.isArray(b) ? flatten(b) : b);\n    }, []);\n  };\n\n  function parseNodes(nodes) {\n    var className = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n    return nodes.map(function (node) {\n      var classes = [].concat(_toConsumableArray(className), _toConsumableArray(node.properties ? node.properties.className : []));\n\n      if (node.children) {\n        return parseNodes(node.children, classes);\n      }\n\n      return {\n        text: node.value,\n        classes: classes\n      };\n    });\n  }\n\n  blocks.forEach(function (block) {\n    var startPos = block.pos + 1;\n    var nodes = low.highlightAuto(block.node.textContent).value;\n    flatten(parseNodes(nodes)).map(function (node) {\n      var from = startPos;\n      var to = from + node.text.length;\n      startPos = to;\n      return _objectSpread2(_objectSpread2({}, node), {}, {\n        from: from,\n        to: to\n      });\n    }).forEach(function (node) {\n      var decoration = Decoration.inline(node.from, node.to, {\n        class: node.classes.join(' ')\n      });\n      decorations.push(decoration);\n    });\n  });\n  return DecorationSet.create(doc, decorations);\n}\n\nfunction HighlightPlugin(_ref2) {\n  var name = _ref2.name;\n  return new Plugin({\n    name: new PluginKey('highlight'),\n    state: {\n      init: function init(_, _ref3) {\n        var doc = _ref3.doc;\n        return getDecorations({\n          doc: doc,\n          name: name\n        });\n      },\n      apply: function apply(transaction, decorationSet, oldState, newState) {\n        // TODO: find way to cache decorations\n        // https://discuss.prosemirror.net/t/how-to-update-multiple-inline-decorations-on-node-change/1493\n        var oldNodeName = oldState.selection.$head.parent.type.name;\n        var newNodeName = newState.selection.$head.parent.type.name;\n        var oldNodes = findBlockNodes(oldState.doc).filter(function (item) {\n          return item.node.type.name === name;\n        });\n        var newNodes = findBlockNodes(newState.doc).filter(function (item) {\n          return item.node.type.name === name;\n        }); // Apply decorations if selection includes named node, or transaction changes named node.\n\n        if (transaction.docChanged && ([oldNodeName, newNodeName].includes(name) || newNodes.length !== oldNodes.length)) {\n          return getDecorations({\n            doc: transaction.doc,\n            name: name\n          });\n        }\n\n        return decorationSet.map(transaction.mapping, transaction.doc);\n      }\n    },\n    props: {\n      decorations: function decorations(state) {\n        return this.getState(state);\n      }\n    }\n  });\n}\n\nvar CodeBlockHighlight = /*#__PURE__*/function (_Node) {\n  _inherits(CodeBlockHighlight, _Node);\n\n  var _super = _createSuper(CodeBlockHighlight);\n\n  function CodeBlockHighlight() {\n    var _this;\n\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, CodeBlockHighlight);\n\n    _this = _super.call(this, options);\n\n    try {\n      Object.entries(_this.options.languages).forEach(function (_ref) {\n        var _ref2 = _slicedToArray(_ref, 2),\n            name = _ref2[0],\n            mapping = _ref2[1];\n\n        low.registerLanguage(name, mapping);\n      });\n    } catch (err) {\n      throw new Error('Invalid syntax highlight definitions: define at least one highlight.js language mapping');\n    }\n\n    return _this;\n  }\n\n  _createClass(CodeBlockHighlight, [{\n    key: \"commands\",\n    value: function commands(_ref3) {\n      var type = _ref3.type,\n          schema = _ref3.schema;\n      return function () {\n        return toggleBlockType(type, schema.nodes.paragraph);\n      };\n    }\n  }, {\n    key: \"keys\",\n    value: function keys(_ref4) {\n      var type = _ref4.type;\n      return {\n        'Shift-Ctrl-\\\\': setBlockType(type)\n      };\n    }\n  }, {\n    key: \"inputRules\",\n    value: function inputRules(_ref5) {\n      var type = _ref5.type;\n      return [textblockTypeInputRule(/^```$/, type)];\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'code_block';\n    }\n  }, {\n    key: \"defaultOptions\",\n    get: function get() {\n      return {\n        languages: {}\n      };\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return {\n        content: 'text*',\n        marks: '',\n        group: 'block',\n        code: true,\n        defining: true,\n        draggable: false,\n        parseDOM: [{\n          tag: 'pre',\n          preserveWhitespace: 'full'\n        }],\n        toDOM: function toDOM() {\n          return ['pre', ['code', 0]];\n        }\n      };\n    }\n  }, {\n    key: \"plugins\",\n    get: function get() {\n      return [HighlightPlugin({\n        name: this.name\n      })];\n    }\n  }]);\n\n  return CodeBlockHighlight;\n}(Node);\n\nvar HardBreak = /*#__PURE__*/function (_Node) {\n  _inherits(HardBreak, _Node);\n\n  var _super = _createSuper(HardBreak);\n\n  function HardBreak() {\n    _classCallCheck(this, HardBreak);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(HardBreak, [{\n    key: \"keys\",\n    value: function keys(_ref) {\n      var type = _ref.type;\n      var command = chainCommands(exitCode, function (state, dispatch) {\n        dispatch(state.tr.replaceSelectionWith(type.create()).scrollIntoView());\n        return true;\n      });\n      return {\n        'Mod-Enter': command,\n        'Shift-Enter': command\n      };\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'hard_break';\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return {\n        inline: true,\n        group: 'inline',\n        selectable: false,\n        parseDOM: [{\n          tag: 'br'\n        }],\n        toDOM: function toDOM() {\n          return ['br'];\n        }\n      };\n    }\n  }]);\n\n  return HardBreak;\n}(Node);\n\nvar Heading = /*#__PURE__*/function (_Node) {\n  _inherits(Heading, _Node);\n\n  var _super = _createSuper(Heading);\n\n  function Heading() {\n    _classCallCheck(this, Heading);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Heading, [{\n    key: \"commands\",\n    value: function commands(_ref) {\n      var type = _ref.type,\n          schema = _ref.schema;\n      return function (attrs) {\n        return toggleBlockType(type, schema.nodes.paragraph, attrs);\n      };\n    }\n  }, {\n    key: \"keys\",\n    value: function keys(_ref2) {\n      var type = _ref2.type;\n      return this.options.levels.reduce(function (items, level) {\n        return _objectSpread2(_objectSpread2({}, items), _defineProperty({}, \"Shift-Ctrl-\".concat(level), setBlockType(type, {\n          level: level\n        })));\n      }, {});\n    }\n  }, {\n    key: \"inputRules\",\n    value: function inputRules(_ref3) {\n      var type = _ref3.type;\n      return this.options.levels.map(function (level) {\n        return textblockTypeInputRule(new RegExp(\"^(#{1,\".concat(level, \"})\\\\s$\")), type, function () {\n          return {\n            level: level\n          };\n        });\n      });\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'heading';\n    }\n  }, {\n    key: \"defaultOptions\",\n    get: function get() {\n      return {\n        levels: [1, 2, 3, 4, 5, 6]\n      };\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return {\n        attrs: {\n          level: {\n            default: 1\n          }\n        },\n        content: 'inline*',\n        group: 'block',\n        defining: true,\n        draggable: false,\n        parseDOM: this.options.levels.map(function (level) {\n          return {\n            tag: \"h\".concat(level),\n            attrs: {\n              level: level\n            }\n          };\n        }),\n        toDOM: function toDOM(node) {\n          return [\"h\".concat(node.attrs.level), 0];\n        }\n      };\n    }\n  }]);\n\n  return Heading;\n}(Node);\n\nvar HorizontalRule = /*#__PURE__*/function (_Node) {\n  _inherits(HorizontalRule, _Node);\n\n  var _super = _createSuper(HorizontalRule);\n\n  function HorizontalRule() {\n    _classCallCheck(this, HorizontalRule);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(HorizontalRule, [{\n    key: \"commands\",\n    value: function commands(_ref) {\n      var type = _ref.type;\n      return function () {\n        return function (state, dispatch) {\n          return dispatch(state.tr.replaceSelectionWith(type.create()));\n        };\n      };\n    }\n  }, {\n    key: \"inputRules\",\n    value: function inputRules(_ref2) {\n      var type = _ref2.type;\n      return [nodeInputRule(/^(?:---|___\\s|\\*\\*\\*\\s)$/, type)];\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'horizontal_rule';\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return {\n        group: 'block',\n        parseDOM: [{\n          tag: 'hr'\n        }],\n        toDOM: function toDOM() {\n          return ['hr'];\n        }\n      };\n    }\n  }]);\n\n  return HorizontalRule;\n}(Node);\n\n/**\n * Matches following attributes in Markdown-typed image: [, alt, src, title]\n *\n * Example:\n * ![Lorem](image.jpg) -> [, \"Lorem\", \"image.jpg\"]\n * ![](image.jpg \"Ipsum\") -> [, \"\", \"image.jpg\", \"Ipsum\"]\n * ![Lorem](image.jpg \"Ipsum\") -> [, \"Lorem\", \"image.jpg\", \"Ipsum\"]\n */\n\nvar IMAGE_INPUT_REGEX = /!\\[(.+|:?)]\\((\\S+)(?:(?:\\s+)[\"'](\\S+)[\"'])?\\)/;\n\nvar Image = /*#__PURE__*/function (_Node) {\n  _inherits(Image, _Node);\n\n  var _super = _createSuper(Image);\n\n  function Image() {\n    _classCallCheck(this, Image);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Image, [{\n    key: \"commands\",\n    value: function commands(_ref) {\n      var type = _ref.type;\n      return function (attrs) {\n        return function (state, dispatch) {\n          var selection = state.selection;\n          var position = selection.$cursor ? selection.$cursor.pos : selection.$to.pos;\n          var node = type.create(attrs);\n          var transaction = state.tr.insert(position, node);\n          dispatch(transaction);\n        };\n      };\n    }\n  }, {\n    key: \"inputRules\",\n    value: function inputRules(_ref2) {\n      var type = _ref2.type;\n      return [nodeInputRule(IMAGE_INPUT_REGEX, type, function (match) {\n        var _match = _slicedToArray(match, 4),\n            alt = _match[1],\n            src = _match[2],\n            title = _match[3];\n\n        return {\n          src: src,\n          alt: alt,\n          title: title\n        };\n      })];\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'image';\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return {\n        inline: true,\n        attrs: {\n          src: {},\n          alt: {\n            default: null\n          },\n          title: {\n            default: null\n          }\n        },\n        group: 'inline',\n        draggable: true,\n        parseDOM: [{\n          tag: 'img[src]',\n          getAttrs: function getAttrs(dom) {\n            return {\n              src: dom.getAttribute('src'),\n              title: dom.getAttribute('title'),\n              alt: dom.getAttribute('alt')\n            };\n          }\n        }],\n        toDOM: function toDOM(node) {\n          return ['img', node.attrs];\n        }\n      };\n    }\n  }, {\n    key: \"plugins\",\n    get: function get() {\n      return [new Plugin({\n        props: {\n          handleDOMEvents: {\n            drop: function drop(view, event) {\n              var hasFiles = event.dataTransfer && event.dataTransfer.files && event.dataTransfer.files.length;\n\n              if (!hasFiles) {\n                return;\n              }\n\n              var images = Array.from(event.dataTransfer.files).filter(function (file) {\n                return /image/i.test(file.type);\n              });\n\n              if (images.length === 0) {\n                return;\n              }\n\n              event.preventDefault();\n              var schema = view.state.schema;\n              var coordinates = view.posAtCoords({\n                left: event.clientX,\n                top: event.clientY\n              });\n              images.forEach(function (image) {\n                var reader = new FileReader();\n\n                reader.onload = function (readerEvent) {\n                  var node = schema.nodes.image.create({\n                    src: readerEvent.target.result\n                  });\n                  var transaction = view.state.tr.insert(coordinates.pos, node);\n                  view.dispatch(transaction);\n                };\n\n                reader.readAsDataURL(image);\n              });\n            }\n          }\n        }\n      })];\n    }\n  }]);\n\n  return Image;\n}(Node);\n\nvar ListItem = /*#__PURE__*/function (_Node) {\n  _inherits(ListItem, _Node);\n\n  var _super = _createSuper(ListItem);\n\n  function ListItem() {\n    _classCallCheck(this, ListItem);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(ListItem, [{\n    key: \"keys\",\n    value: function keys(_ref) {\n      var type = _ref.type;\n      return {\n        Enter: splitListItem(type),\n        Tab: sinkListItem(type),\n        'Shift-Tab': liftListItem(type)\n      };\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'list_item';\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return {\n        content: 'paragraph block*',\n        defining: true,\n        draggable: false,\n        parseDOM: [{\n          tag: 'li'\n        }],\n        toDOM: function toDOM() {\n          return ['li', 0];\n        }\n      };\n    }\n  }]);\n\n  return ListItem;\n}(Node);\n\nfunction triggerCharacter(_ref) {\n  var _ref$char = _ref.char,\n      char = _ref$char === void 0 ? '@' : _ref$char,\n      _ref$allowSpaces = _ref.allowSpaces,\n      allowSpaces = _ref$allowSpaces === void 0 ? false : _ref$allowSpaces,\n      _ref$startOfLine = _ref.startOfLine,\n      startOfLine = _ref$startOfLine === void 0 ? false : _ref$startOfLine;\n  return function ($position) {\n    // cancel if top level node\n    if ($position.depth <= 0) {\n      return false;\n    } // Matching expressions used for later\n\n\n    var escapedChar = \"\\\\\".concat(char);\n    var suffix = new RegExp(\"\\\\s\".concat(escapedChar, \"$\"));\n    var prefix = startOfLine ? '^' : '';\n    var regexp = allowSpaces ? new RegExp(\"\".concat(prefix).concat(escapedChar, \".*?(?=\\\\s\").concat(escapedChar, \"|$)\"), 'gm') : new RegExp(\"\".concat(prefix, \"(?:^)?\").concat(escapedChar, \"[^\\\\s\").concat(escapedChar, \"]*\"), 'gm'); // Lookup the boundaries of the current node\n\n    var textFrom = $position.before();\n    var textTo = $position.end();\n    var text = $position.doc.textBetween(textFrom, textTo, '\\0', '\\0');\n    var match = regexp.exec(text);\n    var position;\n\n    while (match !== null) {\n      // JavaScript doesn't have lookbehinds; this hacks a check that first character is \" \"\n      // or the line beginning\n      var matchPrefix = match.input.slice(Math.max(0, match.index - 1), match.index);\n\n      if (/^[\\s\\0]?$/.test(matchPrefix)) {\n        // The absolute position of the match in the document\n        var from = match.index + $position.start();\n        var to = from + match[0].length; // Edge case handling; if spaces are allowed and we're directly in between\n        // two triggers\n\n        if (allowSpaces && suffix.test(text.slice(to - 1, to + 1))) {\n          match[0] += ' ';\n          to += 1;\n        } // If the $position is located within the matched substring, return that range\n\n\n        if (from < $position.pos && to >= $position.pos) {\n          position = {\n            range: {\n              from: from,\n              to: to\n            },\n            query: match[0].slice(char.length),\n            text: match[0]\n          };\n        }\n      }\n\n      match = regexp.exec(text);\n    }\n\n    return position;\n  };\n}\n\nfunction SuggestionsPlugin(_ref2) {\n  var _ref2$matcher = _ref2.matcher,\n      matcher = _ref2$matcher === void 0 ? {\n    char: '@',\n    allowSpaces: false,\n    startOfLine: false\n  } : _ref2$matcher,\n      _ref2$appendText = _ref2.appendText,\n      appendText = _ref2$appendText === void 0 ? null : _ref2$appendText,\n      _ref2$suggestionClass = _ref2.suggestionClass,\n      suggestionClass = _ref2$suggestionClass === void 0 ? 'suggestion' : _ref2$suggestionClass,\n      _ref2$command = _ref2.command,\n      _command = _ref2$command === void 0 ? function () {\n    return false;\n  } : _ref2$command,\n      _ref2$items = _ref2.items,\n      items = _ref2$items === void 0 ? [] : _ref2$items,\n      _ref2$onEnter = _ref2.onEnter,\n      onEnter = _ref2$onEnter === void 0 ? function () {\n    return false;\n  } : _ref2$onEnter,\n      _ref2$onChange = _ref2.onChange,\n      onChange = _ref2$onChange === void 0 ? function () {\n    return false;\n  } : _ref2$onChange,\n      _ref2$onExit = _ref2.onExit,\n      onExit = _ref2$onExit === void 0 ? function () {\n    return false;\n  } : _ref2$onExit,\n      _ref2$onKeyDown = _ref2.onKeyDown,\n      onKeyDown = _ref2$onKeyDown === void 0 ? function () {\n    return false;\n  } : _ref2$onKeyDown,\n      _ref2$onFilter = _ref2.onFilter,\n      onFilter = _ref2$onFilter === void 0 ? function (searchItems, query) {\n    if (!query) {\n      return searchItems;\n    }\n\n    return searchItems.filter(function (item) {\n      return JSON.stringify(item).toLowerCase().includes(query.toLowerCase());\n    });\n  } : _ref2$onFilter;\n\n  return new Plugin$1({\n    key: new PluginKey$1('suggestions'),\n    view: function view() {\n      var _this = this;\n\n      return {\n        update: function () {\n          var _update = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(view, prevState) {\n            var prev, next, moved, started, stopped, changed, handleStart, handleChange, handleExit, state, decorationNode, virtualNode, props;\n            return regeneratorRuntime.wrap(function _callee$(_context) {\n              while (1) {\n                switch (_context.prev = _context.next) {\n                  case 0:\n                    prev = _this.key.getState(prevState);\n                    next = _this.key.getState(view.state); // See how the state changed\n\n                    moved = prev.active && next.active && prev.range.from !== next.range.from;\n                    started = !prev.active && next.active;\n                    stopped = prev.active && !next.active;\n                    changed = !started && !stopped && prev.query !== next.query;\n                    handleStart = started || moved;\n                    handleChange = changed && !moved;\n                    handleExit = stopped || moved; // Cancel when suggestion isn't active\n\n                    if (!(!handleStart && !handleChange && !handleExit)) {\n                      _context.next = 11;\n                      break;\n                    }\n\n                    return _context.abrupt(\"return\");\n\n                  case 11:\n                    state = handleExit ? prev : next;\n                    decorationNode = document.querySelector(\"[data-decoration-id=\\\"\".concat(state.decorationId, \"\\\"]\")); // build a virtual node for popper.js or tippy.js\n                    // this can be used for building popups without a DOM node\n\n                    virtualNode = decorationNode ? {\n                      getBoundingClientRect: function getBoundingClientRect() {\n                        return decorationNode.getBoundingClientRect();\n                      },\n                      clientWidth: decorationNode.clientWidth,\n                      clientHeight: decorationNode.clientHeight\n                    } : null;\n                    _context.t0 = view;\n                    _context.t1 = state.range;\n                    _context.t2 = state.query;\n                    _context.t3 = state.text;\n                    _context.t4 = decorationNode;\n                    _context.t5 = virtualNode;\n\n                    if (!(handleChange || handleStart)) {\n                      _context.next = 36;\n                      break;\n                    }\n\n                    _context.t7 = onFilter;\n\n                    if (!Array.isArray(items)) {\n                      _context.next = 26;\n                      break;\n                    }\n\n                    _context.t8 = items;\n                    _context.next = 29;\n                    break;\n\n                  case 26:\n                    _context.next = 28;\n                    return items();\n\n                  case 28:\n                    _context.t8 = _context.sent;\n\n                  case 29:\n                    _context.t9 = _context.t8;\n                    _context.t10 = state.query;\n                    _context.next = 33;\n                    return (0, _context.t7)(_context.t9, _context.t10);\n\n                  case 33:\n                    _context.t6 = _context.sent;\n                    _context.next = 37;\n                    break;\n\n                  case 36:\n                    _context.t6 = [];\n\n                  case 37:\n                    _context.t11 = _context.t6;\n\n                    _context.t12 = function command(_ref3) {\n                      var range = _ref3.range,\n                          attrs = _ref3.attrs;\n\n                      _command({\n                        range: range,\n                        attrs: attrs,\n                        schema: view.state.schema\n                      })(view.state, view.dispatch, view);\n\n                      if (appendText) {\n                        insertText(appendText)(view.state, view.dispatch, view);\n                      }\n                    };\n\n                    props = {\n                      view: _context.t0,\n                      range: _context.t1,\n                      query: _context.t2,\n                      text: _context.t3,\n                      decorationNode: _context.t4,\n                      virtualNode: _context.t5,\n                      items: _context.t11,\n                      command: _context.t12\n                    };\n\n                    // Trigger the hooks when necessary\n                    if (handleExit) {\n                      onExit(props);\n                    }\n\n                    if (handleChange) {\n                      onChange(props);\n                    }\n\n                    if (handleStart) {\n                      onEnter(props);\n                    }\n\n                  case 43:\n                  case \"end\":\n                    return _context.stop();\n                }\n              }\n            }, _callee);\n          }));\n\n          function update(_x, _x2) {\n            return _update.apply(this, arguments);\n          }\n\n          return update;\n        }()\n      };\n    },\n    state: {\n      // Initialize the plugin's internal state.\n      init: function init() {\n        return {\n          active: false,\n          range: {},\n          query: null,\n          text: null\n        };\n      },\n      // Apply changes to the plugin state from a view transaction.\n      apply: function apply(tr, prev) {\n        var selection = tr.selection;\n\n        var next = _objectSpread2({}, prev); // We can only be suggesting if there is no selection\n\n\n        if (selection.from === selection.to) {\n          // Reset active state if we just left the previous suggestion range\n          if (selection.from < prev.range.from || selection.from > prev.range.to) {\n            next.active = false;\n          } // Try to match against where our cursor currently is\n\n\n          var $position = selection.$from;\n          var match = triggerCharacter(matcher)($position);\n          var decorationId = (Math.random() + 1).toString(36).substr(2, 5); // If we found a match, update the current state to show it\n\n          if (match) {\n            next.active = true;\n            next.decorationId = prev.decorationId ? prev.decorationId : decorationId;\n            next.range = match.range;\n            next.query = match.query;\n            next.text = match.text;\n          } else {\n            next.active = false;\n          }\n        } else {\n          next.active = false;\n        } // Make sure to empty the range if suggestion is inactive\n\n\n        if (!next.active) {\n          next.decorationId = null;\n          next.range = {};\n          next.query = null;\n          next.text = null;\n        }\n\n        return next;\n      }\n    },\n    props: {\n      // Call the keydown hook if suggestion is active.\n      handleKeyDown: function handleKeyDown(view, event) {\n        var _this$getState = this.getState(view.state),\n            active = _this$getState.active,\n            range = _this$getState.range;\n\n        if (!active) return false;\n        return onKeyDown({\n          view: view,\n          event: event,\n          range: range\n        });\n      },\n      // Setup decorator on the currently active suggestion.\n      decorations: function decorations(editorState) {\n        var _this$getState2 = this.getState(editorState),\n            active = _this$getState2.active,\n            range = _this$getState2.range,\n            decorationId = _this$getState2.decorationId;\n\n        if (!active) return null;\n        return DecorationSet.create(editorState.doc, [Decoration.inline(range.from, range.to, {\n          nodeName: 'span',\n          class: suggestionClass,\n          'data-decoration-id': decorationId\n        })]);\n      }\n    }\n  });\n}\n\nvar Mention = /*#__PURE__*/function (_Node) {\n  _inherits(Mention, _Node);\n\n  var _super = _createSuper(Mention);\n\n  function Mention() {\n    _classCallCheck(this, Mention);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Mention, [{\n    key: \"commands\",\n    value: function commands(_ref) {\n      var _this = this;\n\n      var schema = _ref.schema;\n      return function (attrs) {\n        return replaceText(null, schema.nodes[_this.name], attrs);\n      };\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'mention';\n    }\n  }, {\n    key: \"defaultOptions\",\n    get: function get() {\n      return {\n        matcher: {\n          char: '@',\n          allowSpaces: false,\n          startOfLine: false\n        },\n        mentionClass: 'mention',\n        suggestionClass: 'mention-suggestion'\n      };\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      var _this2 = this;\n\n      return {\n        attrs: {\n          id: {},\n          label: {}\n        },\n        group: 'inline',\n        inline: true,\n        selectable: false,\n        atom: true,\n        toDOM: function toDOM(node) {\n          return ['span', {\n            class: _this2.options.mentionClass,\n            'data-mention-id': node.attrs.id\n          }, \"\".concat(_this2.options.matcher.char).concat(node.attrs.label)];\n        },\n        parseDOM: [{\n          tag: 'span[data-mention-id]',\n          getAttrs: function getAttrs(dom) {\n            var id = dom.getAttribute('data-mention-id');\n            var label = dom.innerText.split(_this2.options.matcher.char).join('');\n            return {\n              id: id,\n              label: label\n            };\n          }\n        }]\n      };\n    }\n  }, {\n    key: \"plugins\",\n    get: function get() {\n      var _this3 = this;\n\n      return [SuggestionsPlugin({\n        command: function command(_ref2) {\n          var range = _ref2.range,\n              attrs = _ref2.attrs,\n              schema = _ref2.schema;\n          return replaceText(range, schema.nodes[_this3.name], attrs);\n        },\n        appendText: ' ',\n        matcher: this.options.matcher,\n        items: this.options.items,\n        onEnter: this.options.onEnter,\n        onChange: this.options.onChange,\n        onExit: this.options.onExit,\n        onKeyDown: this.options.onKeyDown,\n        onFilter: this.options.onFilter,\n        suggestionClass: this.options.suggestionClass\n      })];\n    }\n  }]);\n\n  return Mention;\n}(Node);\n\nvar OrderedList = /*#__PURE__*/function (_Node) {\n  _inherits(OrderedList, _Node);\n\n  var _super = _createSuper(OrderedList);\n\n  function OrderedList() {\n    _classCallCheck(this, OrderedList);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(OrderedList, [{\n    key: \"commands\",\n    value: function commands(_ref) {\n      var type = _ref.type,\n          schema = _ref.schema;\n      return function () {\n        return toggleList(type, schema.nodes.list_item);\n      };\n    }\n  }, {\n    key: \"keys\",\n    value: function keys(_ref2) {\n      var type = _ref2.type,\n          schema = _ref2.schema;\n      return {\n        'Shift-Ctrl-9': toggleList(type, schema.nodes.list_item)\n      };\n    }\n  }, {\n    key: \"inputRules\",\n    value: function inputRules(_ref3) {\n      var type = _ref3.type;\n      return [wrappingInputRule(/^(\\d+)\\.\\s$/, type, function (match) {\n        return {\n          order: +match[1]\n        };\n      }, function (match, node) {\n        return node.childCount + node.attrs.order === +match[1];\n      })];\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'ordered_list';\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return {\n        attrs: {\n          order: {\n            default: 1\n          }\n        },\n        content: 'list_item+',\n        group: 'block',\n        parseDOM: [{\n          tag: 'ol',\n          getAttrs: function getAttrs(dom) {\n            return {\n              order: dom.hasAttribute('start') ? +dom.getAttribute('start') : 1\n            };\n          }\n        }],\n        toDOM: function toDOM(node) {\n          return node.attrs.order === 1 ? ['ol', 0] : ['ol', {\n            start: node.attrs.order\n          }, 0];\n        }\n      };\n    }\n  }]);\n\n  return OrderedList;\n}(Node);\n\nvar TableNodes = tableNodes({\n  tableGroup: 'block',\n  cellContent: 'block+',\n  cellAttributes: {\n    background: {\n      default: null,\n      getFromDOM: function getFromDOM(dom) {\n        return dom.style.backgroundColor || null;\n      },\n      setDOMAttr: function setDOMAttr(value, attrs) {\n        if (value) {\n          var style = {\n            style: \"\".concat(attrs.style || '', \"background-color: \").concat(value, \";\")\n          };\n          Object.assign(attrs, style);\n        }\n      }\n    }\n  }\n});\n\nvar Table = /*#__PURE__*/function (_Node) {\n  _inherits(Table, _Node);\n\n  var _super = _createSuper(Table);\n\n  function Table() {\n    _classCallCheck(this, Table);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Table, [{\n    key: \"commands\",\n    value: function commands(_ref) {\n      var schema = _ref.schema;\n      return {\n        createTable: function createTable$1(_ref2) {\n          var rowsCount = _ref2.rowsCount,\n              colsCount = _ref2.colsCount,\n              withHeaderRow = _ref2.withHeaderRow;\n          return function (state, dispatch) {\n            var offset = state.tr.selection.anchor + 1;\n\n            var nodes = createTable(schema, rowsCount, colsCount, withHeaderRow);\n\n            var tr = state.tr.replaceSelectionWith(nodes).scrollIntoView();\n            var resolvedPos = tr.doc.resolve(offset);\n            tr.setSelection(TextSelection.near(resolvedPos));\n            dispatch(tr);\n          };\n        },\n        addColumnBefore: function addColumnBefore$1() {\n          return addColumnBefore;\n        },\n        addColumnAfter: function addColumnAfter$1() {\n          return addColumnAfter;\n        },\n        deleteColumn: function deleteColumn$1() {\n          return deleteColumn;\n        },\n        addRowBefore: function addRowBefore$1() {\n          return addRowBefore;\n        },\n        addRowAfter: function addRowAfter$1() {\n          return addRowAfter;\n        },\n        deleteRow: function deleteRow$1() {\n          return deleteRow;\n        },\n        deleteTable: function deleteTable$1() {\n          return deleteTable;\n        },\n        toggleCellMerge: function toggleCellMerge() {\n          return function (state, dispatch) {\n            if (mergeCells(state, dispatch)) {\n              return;\n            }\n\n            splitCell(state, dispatch);\n          };\n        },\n        mergeCells: function mergeCells$1() {\n          return mergeCells;\n        },\n        splitCell: function splitCell$1() {\n          return splitCell;\n        },\n        toggleHeaderColumn: function toggleHeaderColumn$1() {\n          return toggleHeaderColumn;\n        },\n        toggleHeaderRow: function toggleHeaderRow$1() {\n          return toggleHeaderRow;\n        },\n        toggleHeaderCell: function toggleHeaderCell$1() {\n          return toggleHeaderCell;\n        },\n        setCellAttr: function setCellAttr$1() {\n          return setCellAttr;\n        },\n        fixTables: function fixTables$1() {\n          return fixTables;\n        }\n      };\n    }\n  }, {\n    key: \"keys\",\n    value: function keys() {\n      return {\n        Tab: goToNextCell(1),\n        'Shift-Tab': goToNextCell(-1)\n      };\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'table';\n    }\n  }, {\n    key: \"defaultOptions\",\n    get: function get() {\n      return {\n        resizable: false\n      };\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return TableNodes.table;\n    }\n  }, {\n    key: \"plugins\",\n    get: function get() {\n      return [].concat(_toConsumableArray(this.options.resizable ? [columnResizing()] : []), [tableEditing()]);\n    }\n  }]);\n\n  return Table;\n}(Node);\n\nvar TableHeader = /*#__PURE__*/function (_Node) {\n  _inherits(TableHeader, _Node);\n\n  var _super = _createSuper(TableHeader);\n\n  function TableHeader() {\n    _classCallCheck(this, TableHeader);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(TableHeader, [{\n    key: \"name\",\n    get: function get() {\n      return 'table_header';\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return TableNodes.table_header;\n    }\n  }]);\n\n  return TableHeader;\n}(Node);\n\nvar TableCell = /*#__PURE__*/function (_Node) {\n  _inherits(TableCell, _Node);\n\n  var _super = _createSuper(TableCell);\n\n  function TableCell() {\n    _classCallCheck(this, TableCell);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(TableCell, [{\n    key: \"name\",\n    get: function get() {\n      return 'table_cell';\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return TableNodes.table_cell;\n    }\n  }]);\n\n  return TableCell;\n}(Node);\n\nvar TableRow = /*#__PURE__*/function (_Node) {\n  _inherits(TableRow, _Node);\n\n  var _super = _createSuper(TableRow);\n\n  function TableRow() {\n    _classCallCheck(this, TableRow);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(TableRow, [{\n    key: \"name\",\n    get: function get() {\n      return 'table_row';\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return TableNodes.table_row;\n    }\n  }]);\n\n  return TableRow;\n}(Node);\n\nvar TodoItem = /*#__PURE__*/function (_Node) {\n  _inherits(TodoItem, _Node);\n\n  var _super = _createSuper(TodoItem);\n\n  function TodoItem() {\n    _classCallCheck(this, TodoItem);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(TodoItem, [{\n    key: \"keys\",\n    value: function keys(_ref) {\n      var type = _ref.type;\n      return {\n        Enter: splitToDefaultListItem(type),\n        Tab: this.options.nested ? sinkListItem(type) : function () {},\n        'Shift-Tab': liftListItem(type)\n      };\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'todo_item';\n    }\n  }, {\n    key: \"defaultOptions\",\n    get: function get() {\n      return {\n        nested: false\n      };\n    }\n  }, {\n    key: \"view\",\n    get: function get() {\n      return {\n        props: ['node', 'updateAttrs', 'view'],\n        methods: {\n          onChange: function onChange() {\n            this.updateAttrs({\n              done: !this.node.attrs.done\n            });\n          }\n        },\n        template: \"\\n        <li :data-type=\\\"node.type.name\\\" :data-done=\\\"node.attrs.done.toString()\\\" data-drag-handle>\\n          <span class=\\\"todo-checkbox\\\" contenteditable=\\\"false\\\" @click=\\\"onChange\\\"></span>\\n          <div class=\\\"todo-content\\\" ref=\\\"content\\\" :contenteditable=\\\"view.editable.toString()\\\"></div>\\n        </li>\\n      \"\n      };\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      var _this = this;\n\n      return {\n        attrs: {\n          done: {\n            default: false\n          }\n        },\n        draggable: true,\n        content: this.options.nested ? '(paragraph|todo_list)+' : 'paragraph+',\n        toDOM: function toDOM(node) {\n          var done = node.attrs.done;\n          return ['li', {\n            'data-type': _this.name,\n            'data-done': done.toString()\n          }, ['span', {\n            class: 'todo-checkbox',\n            contenteditable: 'false'\n          }], ['div', {\n            class: 'todo-content'\n          }, 0]];\n        },\n        parseDOM: [{\n          priority: 51,\n          tag: \"[data-type=\\\"\".concat(this.name, \"\\\"]\"),\n          getAttrs: function getAttrs(dom) {\n            return {\n              done: dom.getAttribute('data-done') === 'true'\n            };\n          }\n        }]\n      };\n    }\n  }]);\n\n  return TodoItem;\n}(Node);\n\nvar TodoList = /*#__PURE__*/function (_Node) {\n  _inherits(TodoList, _Node);\n\n  var _super = _createSuper(TodoList);\n\n  function TodoList() {\n    _classCallCheck(this, TodoList);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(TodoList, [{\n    key: \"commands\",\n    value: function commands(_ref) {\n      var type = _ref.type,\n          schema = _ref.schema;\n      return function () {\n        return toggleList(type, schema.nodes.todo_item);\n      };\n    }\n  }, {\n    key: \"inputRules\",\n    value: function inputRules(_ref2) {\n      var type = _ref2.type;\n      return [wrappingInputRule(/^\\s*(\\[ \\])\\s$/, type)];\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'todo_list';\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      var _this = this;\n\n      return {\n        group: 'block',\n        content: 'todo_item+',\n        toDOM: function toDOM() {\n          return ['ul', {\n            'data-type': _this.name\n          }, 0];\n        },\n        parseDOM: [{\n          priority: 51,\n          tag: \"[data-type=\\\"\".concat(this.name, \"\\\"]\")\n        }]\n      };\n    }\n  }]);\n\n  return TodoList;\n}(Node);\n\nvar Bold = /*#__PURE__*/function (_Mark) {\n  _inherits(Bold, _Mark);\n\n  var _super = _createSuper(Bold);\n\n  function Bold() {\n    _classCallCheck(this, Bold);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Bold, [{\n    key: \"keys\",\n    value: function keys(_ref) {\n      var type = _ref.type;\n      return {\n        'Mod-b': toggleMark(type)\n      };\n    }\n  }, {\n    key: \"commands\",\n    value: function commands(_ref2) {\n      var type = _ref2.type;\n      return function () {\n        return toggleMark(type);\n      };\n    }\n  }, {\n    key: \"inputRules\",\n    value: function inputRules(_ref3) {\n      var type = _ref3.type;\n      return [markInputRule(/(?:\\*\\*|__)([^*_]+)(?:\\*\\*|__)$/, type)];\n    }\n  }, {\n    key: \"pasteRules\",\n    value: function pasteRules(_ref4) {\n      var type = _ref4.type;\n      return [markPasteRule(/(?:\\*\\*|__)([^*_]+)(?:\\*\\*|__)/g, type)];\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'bold';\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return {\n        parseDOM: [{\n          tag: 'strong'\n        }, {\n          tag: 'b',\n          getAttrs: function getAttrs(node) {\n            return node.style.fontWeight !== 'normal' && null;\n          }\n        }, {\n          style: 'font-weight',\n          getAttrs: function getAttrs(value) {\n            return /^(bold(er)?|[5-9]\\d{2,})$/.test(value) && null;\n          }\n        }],\n        toDOM: function toDOM() {\n          return ['strong', 0];\n        }\n      };\n    }\n  }]);\n\n  return Bold;\n}(Mark);\n\nvar Code = /*#__PURE__*/function (_Mark) {\n  _inherits(Code, _Mark);\n\n  var _super = _createSuper(Code);\n\n  function Code() {\n    _classCallCheck(this, Code);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Code, [{\n    key: \"keys\",\n    value: function keys(_ref) {\n      var type = _ref.type;\n      return {\n        'Mod-`': toggleMark(type)\n      };\n    }\n  }, {\n    key: \"commands\",\n    value: function commands(_ref2) {\n      var type = _ref2.type;\n      return function () {\n        return toggleMark(type);\n      };\n    }\n  }, {\n    key: \"inputRules\",\n    value: function inputRules(_ref3) {\n      var type = _ref3.type;\n      return [markInputRule(/(?:`)([^`]+)(?:`)$/, type)];\n    }\n  }, {\n    key: \"pasteRules\",\n    value: function pasteRules(_ref4) {\n      var type = _ref4.type;\n      return [markPasteRule(/(?:`)([^`]+)(?:`)/g, type)];\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'code';\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return {\n        excludes: '_',\n        parseDOM: [{\n          tag: 'code'\n        }],\n        toDOM: function toDOM() {\n          return ['code', 0];\n        }\n      };\n    }\n  }]);\n\n  return Code;\n}(Mark);\n\nvar Italic = /*#__PURE__*/function (_Mark) {\n  _inherits(Italic, _Mark);\n\n  var _super = _createSuper(Italic);\n\n  function Italic() {\n    _classCallCheck(this, Italic);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Italic, [{\n    key: \"keys\",\n    value: function keys(_ref) {\n      var type = _ref.type;\n      return {\n        'Mod-i': toggleMark(type)\n      };\n    }\n  }, {\n    key: \"commands\",\n    value: function commands(_ref2) {\n      var type = _ref2.type;\n      return function () {\n        return toggleMark(type);\n      };\n    }\n  }, {\n    key: \"inputRules\",\n    value: function inputRules(_ref3) {\n      var type = _ref3.type;\n      return [markInputRule(/(?:^|[^_])(_([^_]+)_)$/, type), markInputRule(/(?:^|[^*])(\\*([^*]+)\\*)$/, type)];\n    }\n  }, {\n    key: \"pasteRules\",\n    value: function pasteRules(_ref4) {\n      var type = _ref4.type;\n      return [markPasteRule(/_([^_]+)_/g, type), markPasteRule(/\\*([^*]+)\\*/g, type)];\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'italic';\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return {\n        parseDOM: [{\n          tag: 'i'\n        }, {\n          tag: 'em'\n        }, {\n          style: 'font-style=italic'\n        }],\n        toDOM: function toDOM() {\n          return ['em', 0];\n        }\n      };\n    }\n  }]);\n\n  return Italic;\n}(Mark);\n\nvar Link = /*#__PURE__*/function (_Mark) {\n  _inherits(Link, _Mark);\n\n  var _super = _createSuper(Link);\n\n  function Link() {\n    _classCallCheck(this, Link);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Link, [{\n    key: \"commands\",\n    value: function commands(_ref) {\n      var type = _ref.type;\n      return function (attrs) {\n        if (attrs.href) {\n          return updateMark(type, attrs);\n        }\n\n        return removeMark(type);\n      };\n    }\n  }, {\n    key: \"pasteRules\",\n    value: function pasteRules(_ref2) {\n      var type = _ref2.type;\n      return [pasteRule(/https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z]{2,}\\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/gi, type, function (url) {\n        return {\n          href: url\n        };\n      })];\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'link';\n    }\n  }, {\n    key: \"defaultOptions\",\n    get: function get() {\n      return {\n        openOnClick: true,\n        target: null\n      };\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      var _this = this;\n\n      return {\n        attrs: {\n          href: {\n            default: null\n          },\n          target: {\n            default: null\n          }\n        },\n        inclusive: false,\n        parseDOM: [{\n          tag: 'a[href]',\n          getAttrs: function getAttrs(dom) {\n            return {\n              href: dom.getAttribute('href'),\n              target: dom.getAttribute('target')\n            };\n          }\n        }],\n        toDOM: function toDOM(node) {\n          return ['a', _objectSpread2(_objectSpread2({}, node.attrs), {}, {\n            rel: 'noopener noreferrer nofollow',\n            target: _this.options.target\n          }), 0];\n        }\n      };\n    }\n  }, {\n    key: \"plugins\",\n    get: function get() {\n      if (!this.options.openOnClick) {\n        return [];\n      }\n\n      return [new Plugin({\n        props: {\n          handleClick: function handleClick(view, pos, event) {\n            var schema = view.state.schema;\n            var attrs = getMarkAttrs(view.state, schema.marks.link);\n\n            if (attrs.href && event.target instanceof HTMLAnchorElement) {\n              event.stopPropagation();\n              window.open(attrs.href, attrs.target);\n            }\n          }\n        }\n      })];\n    }\n  }]);\n\n  return Link;\n}(Mark);\n\nvar Strike = /*#__PURE__*/function (_Mark) {\n  _inherits(Strike, _Mark);\n\n  var _super = _createSuper(Strike);\n\n  function Strike() {\n    _classCallCheck(this, Strike);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Strike, [{\n    key: \"keys\",\n    value: function keys(_ref) {\n      var type = _ref.type;\n      return {\n        'Mod-d': toggleMark(type)\n      };\n    }\n  }, {\n    key: \"commands\",\n    value: function commands(_ref2) {\n      var type = _ref2.type;\n      return function () {\n        return toggleMark(type);\n      };\n    }\n  }, {\n    key: \"inputRules\",\n    value: function inputRules(_ref3) {\n      var type = _ref3.type;\n      return [markInputRule(/~([^~]+)~$/, type)];\n    }\n  }, {\n    key: \"pasteRules\",\n    value: function pasteRules(_ref4) {\n      var type = _ref4.type;\n      return [markPasteRule(/~([^~]+)~/g, type)];\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'strike';\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return {\n        parseDOM: [{\n          tag: 's'\n        }, {\n          tag: 'del'\n        }, {\n          tag: 'strike'\n        }, {\n          style: 'text-decoration',\n          getAttrs: function getAttrs(value) {\n            return value === 'line-through';\n          }\n        }],\n        toDOM: function toDOM() {\n          return ['s', 0];\n        }\n      };\n    }\n  }]);\n\n  return Strike;\n}(Mark);\n\nvar Underline = /*#__PURE__*/function (_Mark) {\n  _inherits(Underline, _Mark);\n\n  var _super = _createSuper(Underline);\n\n  function Underline() {\n    _classCallCheck(this, Underline);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Underline, [{\n    key: \"keys\",\n    value: function keys(_ref) {\n      var type = _ref.type;\n      return {\n        'Mod-u': toggleMark(type)\n      };\n    }\n  }, {\n    key: \"commands\",\n    value: function commands(_ref2) {\n      var type = _ref2.type;\n      return function () {\n        return toggleMark(type);\n      };\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'underline';\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return {\n        parseDOM: [{\n          tag: 'u'\n        }, {\n          style: 'text-decoration',\n          getAttrs: function getAttrs(value) {\n            return value === 'underline';\n          }\n        }],\n        toDOM: function toDOM() {\n          return ['u', 0];\n        }\n      };\n    }\n  }]);\n\n  return Underline;\n}(Mark);\n\nvar Collaboration = /*#__PURE__*/function (_Extension) {\n  _inherits(Collaboration, _Extension);\n\n  var _super = _createSuper(Collaboration);\n\n  function Collaboration() {\n    _classCallCheck(this, Collaboration);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Collaboration, [{\n    key: \"init\",\n    value: function init() {\n      var _this = this;\n\n      this.getSendableSteps = this.debounce(function (state) {\n        var sendable = sendableSteps(state);\n\n        if (sendable) {\n          _this.options.onSendable({\n            editor: _this.editor,\n            sendable: {\n              version: sendable.version,\n              steps: sendable.steps.map(function (step) {\n                return step.toJSON();\n              }),\n              clientID: sendable.clientID\n            }\n          });\n        }\n      }, this.options.debounce);\n      this.editor.on('transaction', function (_ref) {\n        var state = _ref.state;\n\n        _this.getSendableSteps(state);\n      });\n    }\n  }, {\n    key: \"debounce\",\n    value: function debounce(fn, delay) {\n      var timeout;\n      return function () {\n        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        if (timeout) {\n          clearTimeout(timeout);\n        }\n\n        timeout = setTimeout(function () {\n          fn.apply(void 0, args);\n          timeout = null;\n        }, delay);\n      };\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'collaboration';\n    }\n  }, {\n    key: \"defaultOptions\",\n    get: function get() {\n      var _this2 = this;\n\n      return {\n        version: 0,\n        clientID: Math.floor(Math.random() * 0xFFFFFFFF),\n        debounce: 250,\n        onSendable: function onSendable() {},\n        update: function update(_ref2) {\n          var steps = _ref2.steps,\n              version = _ref2.version;\n          var _this2$editor = _this2.editor,\n              state = _this2$editor.state,\n              view = _this2$editor.view,\n              schema = _this2$editor.schema;\n\n          if (getVersion(state) > version) {\n            return;\n          }\n\n          view.dispatch(receiveTransaction(state, steps.map(function (item) {\n            return Step.fromJSON(schema, item.step);\n          }), steps.map(function (item) {\n            return item.clientID;\n          })));\n        }\n      };\n    }\n  }, {\n    key: \"plugins\",\n    get: function get() {\n      return [collab({\n        version: this.options.version,\n        clientID: this.options.clientID\n      })];\n    }\n  }]);\n\n  return Collaboration;\n}(Extension);\n\nvar Focus = /*#__PURE__*/function (_Extension) {\n  _inherits(Focus, _Extension);\n\n  var _super = _createSuper(Focus);\n\n  function Focus() {\n    _classCallCheck(this, Focus);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Focus, [{\n    key: \"name\",\n    get: function get() {\n      return 'focus';\n    }\n  }, {\n    key: \"defaultOptions\",\n    get: function get() {\n      return {\n        className: 'has-focus',\n        nested: false\n      };\n    }\n  }, {\n    key: \"plugins\",\n    get: function get() {\n      var _this = this;\n\n      return [new Plugin({\n        props: {\n          decorations: function decorations(_ref) {\n            var doc = _ref.doc,\n                plugins = _ref.plugins,\n                selection = _ref.selection;\n            var editablePlugin = plugins.find(function (plugin) {\n              return plugin.key.startsWith('editable$');\n            });\n            var editable = editablePlugin.props.editable();\n            var active = editable && _this.options.className;\n            var focused = _this.editor.focused;\n            var anchor = selection.anchor;\n            var decorations = [];\n\n            if (!active || !focused) {\n              return false;\n            }\n\n            doc.descendants(function (node, pos) {\n              var hasAnchor = anchor >= pos && anchor <= pos + node.nodeSize;\n\n              if (hasAnchor && !node.isText) {\n                var decoration = Decoration.node(pos, pos + node.nodeSize, {\n                  class: _this.options.className\n                });\n                decorations.push(decoration);\n              }\n\n              return _this.options.nested;\n            });\n            return DecorationSet.create(doc, decorations);\n          }\n        }\n      })];\n    }\n  }]);\n\n  return Focus;\n}(Extension);\n\nvar History = /*#__PURE__*/function (_Extension) {\n  _inherits(History, _Extension);\n\n  var _super = _createSuper(History);\n\n  function History() {\n    _classCallCheck(this, History);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(History, [{\n    key: \"keys\",\n    value: function keys() {\n      var keymap = {\n        'Mod-z': undo,\n        'Mod-y': redo,\n        'Shift-Mod-z': redo,\n        // Russian language\n        'Mod-я': undo,\n        'Shift-Mod-я': redo\n      };\n      return keymap;\n    }\n  }, {\n    key: \"commands\",\n    value: function commands() {\n      return {\n        undo: function undo$1() {\n          return undo;\n        },\n        redo: function redo$1() {\n          return redo;\n        },\n        undoDepth: function undoDepth$1() {\n          return undoDepth;\n        },\n        redoDepth: function redoDepth$1() {\n          return redoDepth;\n        }\n      };\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'history';\n    }\n  }, {\n    key: \"defaultOptions\",\n    get: function get() {\n      return {\n        depth: '',\n        newGroupDelay: ''\n      };\n    }\n  }, {\n    key: \"plugins\",\n    get: function get() {\n      return [history({\n        depth: this.options.depth,\n        newGroupDelay: this.options.newGroupDelay\n      })];\n    }\n  }]);\n\n  return History;\n}(Extension);\n\nvar Placeholder = /*#__PURE__*/function (_Extension) {\n  _inherits(Placeholder, _Extension);\n\n  var _super = _createSuper(Placeholder);\n\n  function Placeholder() {\n    _classCallCheck(this, Placeholder);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Placeholder, [{\n    key: \"name\",\n    get: function get() {\n      return 'placeholder';\n    }\n  }, {\n    key: \"defaultOptions\",\n    get: function get() {\n      return {\n        emptyEditorClass: 'is-editor-empty',\n        emptyNodeClass: 'is-empty',\n        emptyNodeText: 'Write something …',\n        showOnlyWhenEditable: true,\n        showOnlyCurrent: true\n      };\n    }\n  }, {\n    key: \"plugins\",\n    get: function get() {\n      var _this = this;\n\n      return [new Plugin({\n        props: {\n          decorations: function decorations(_ref) {\n            var doc = _ref.doc,\n                plugins = _ref.plugins,\n                selection = _ref.selection;\n            var editablePlugin = plugins.find(function (plugin) {\n              return plugin.key.startsWith('editable$');\n            });\n            var editable = editablePlugin.props.editable();\n            var active = editable || !_this.options.showOnlyWhenEditable;\n            var anchor = selection.anchor;\n            var decorations = [];\n            var isEditorEmpty = doc.textContent.length === 0;\n\n            if (!active) {\n              return false;\n            }\n\n            doc.descendants(function (node, pos) {\n              var hasAnchor = anchor >= pos && anchor <= pos + node.nodeSize;\n              var isNodeEmpty = node.content.size === 0;\n\n              if ((hasAnchor || !_this.options.showOnlyCurrent) && isNodeEmpty) {\n                var classes = [_this.options.emptyNodeClass];\n\n                if (isEditorEmpty) {\n                  classes.push(_this.options.emptyEditorClass);\n                }\n\n                var decoration = Decoration.node(pos, pos + node.nodeSize, {\n                  class: classes.join(' '),\n                  'data-empty-text': typeof _this.options.emptyNodeText === 'function' ? _this.options.emptyNodeText(node) : _this.options.emptyNodeText\n                });\n                decorations.push(decoration);\n              }\n\n              return false;\n            });\n            return DecorationSet.create(doc, decorations);\n          }\n        }\n      })];\n    }\n  }]);\n\n  return Placeholder;\n}(Extension);\n\nvar Search = /*#__PURE__*/function (_Extension) {\n  _inherits(Search, _Extension);\n\n  var _super = _createSuper(Search);\n\n  function Search() {\n    var _this;\n\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, Search);\n\n    _this = _super.call(this, options);\n    _this.results = [];\n    _this.searchTerm = null;\n    _this._updating = false;\n    return _this;\n  }\n\n  _createClass(Search, [{\n    key: \"commands\",\n    value: function commands() {\n      var _this2 = this;\n\n      return {\n        find: function find(attrs) {\n          return _this2.find(attrs);\n        },\n        replace: function replace(attrs) {\n          return _this2.replace(attrs);\n        },\n        replaceAll: function replaceAll(attrs) {\n          return _this2.replaceAll(attrs);\n        },\n        clearSearch: function clearSearch() {\n          return _this2.clear();\n        }\n      };\n    }\n  }, {\n    key: \"_search\",\n    value: function _search(doc) {\n      var _this3 = this;\n\n      this.results = [];\n      var mergedTextNodes = [];\n      var index = 0;\n\n      if (!this.searchTerm) {\n        return;\n      }\n\n      doc.descendants(function (node, pos) {\n        if (node.isText) {\n          if (mergedTextNodes[index]) {\n            mergedTextNodes[index] = {\n              text: mergedTextNodes[index].text + node.text,\n              pos: mergedTextNodes[index].pos\n            };\n          } else {\n            mergedTextNodes[index] = {\n              text: node.text,\n              pos: pos\n            };\n          }\n        } else {\n          index += 1;\n        }\n      });\n      mergedTextNodes.forEach(function (_ref) {\n        var text = _ref.text,\n            pos = _ref.pos;\n        var search = _this3.findRegExp;\n        var m; // eslint-disable-next-line no-cond-assign\n\n        while (m = search.exec(text)) {\n          if (m[0] === '') {\n            break;\n          }\n\n          _this3.results.push({\n            from: pos + m.index,\n            to: pos + m.index + m[0].length\n          });\n        }\n      });\n    }\n  }, {\n    key: \"replace\",\n    value: function replace(_replace) {\n      var _this4 = this;\n\n      return function (state, dispatch) {\n        var firstResult = _this4.results[0];\n\n        if (!firstResult) {\n          return;\n        }\n\n        var _this4$results$ = _this4.results[0],\n            from = _this4$results$.from,\n            to = _this4$results$.to;\n        dispatch(state.tr.insertText(_replace, from, to));\n\n        _this4.editor.commands.find(_this4.searchTerm);\n      };\n    }\n  }, {\n    key: \"rebaseNextResult\",\n    value: function rebaseNextResult(replace, index) {\n      var lastOffset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n      var nextIndex = index + 1;\n\n      if (!this.results[nextIndex]) {\n        return null;\n      }\n\n      var _this$results$index = this.results[index],\n          currentFrom = _this$results$index.from,\n          currentTo = _this$results$index.to;\n      var offset = currentTo - currentFrom - replace.length + lastOffset;\n      var _this$results$nextInd = this.results[nextIndex],\n          from = _this$results$nextInd.from,\n          to = _this$results$nextInd.to;\n      this.results[nextIndex] = {\n        to: to - offset,\n        from: from - offset\n      };\n      return offset;\n    }\n  }, {\n    key: \"replaceAll\",\n    value: function replaceAll(replace) {\n      var _this5 = this;\n\n      return function (_ref2, dispatch) {\n        var tr = _ref2.tr;\n        var offset;\n\n        if (!_this5.results.length) {\n          return;\n        }\n\n        _this5.results.forEach(function (_ref3, index) {\n          var from = _ref3.from,\n              to = _ref3.to;\n          tr.insertText(replace, from, to);\n          offset = _this5.rebaseNextResult(replace, index, offset);\n        });\n\n        dispatch(tr);\n\n        _this5.editor.commands.find(_this5.searchTerm);\n      };\n    }\n  }, {\n    key: \"find\",\n    value: function find(searchTerm) {\n      var _this6 = this;\n\n      return function (state, dispatch) {\n        _this6.searchTerm = _this6.options.disableRegex ? searchTerm.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&') : searchTerm;\n\n        _this6.updateView(state, dispatch);\n      };\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      var _this7 = this;\n\n      return function (state, dispatch) {\n        _this7.searchTerm = null;\n\n        _this7.updateView(state, dispatch);\n      };\n    }\n  }, {\n    key: \"updateView\",\n    value: function updateView(_ref4, dispatch) {\n      var tr = _ref4.tr;\n      this._updating = true;\n      dispatch(tr);\n      this._updating = false;\n    }\n  }, {\n    key: \"createDeco\",\n    value: function createDeco(doc) {\n      this._search(doc);\n\n      return this.decorations ? DecorationSet.create(doc, this.decorations) : [];\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      return 'search';\n    }\n  }, {\n    key: \"defaultOptions\",\n    get: function get() {\n      return {\n        autoSelectNext: true,\n        findClass: 'find',\n        searching: false,\n        caseSensitive: false,\n        disableRegex: true,\n        alwaysSearch: false\n      };\n    }\n  }, {\n    key: \"findRegExp\",\n    get: function get() {\n      return RegExp(this.searchTerm, !this.options.caseSensitive ? 'gui' : 'gu');\n    }\n  }, {\n    key: \"decorations\",\n    get: function get() {\n      var _this8 = this;\n\n      return this.results.map(function (deco) {\n        return Decoration.inline(deco.from, deco.to, {\n          class: _this8.options.findClass\n        });\n      });\n    }\n  }, {\n    key: \"plugins\",\n    get: function get() {\n      var _this9 = this;\n\n      return [new Plugin({\n        state: {\n          init: function init() {\n            return DecorationSet.empty;\n          },\n          apply: function apply(tr, old) {\n            if (_this9._updating || _this9.options.searching || tr.docChanged && _this9.options.alwaysSearch) {\n              return _this9.createDeco(tr.doc);\n            }\n\n            if (tr.docChanged) {\n              return old.map(tr.mapping, tr.doc);\n            }\n\n            return old;\n          }\n        },\n        props: {\n          decorations: function decorations(state) {\n            return this.getState(state);\n          }\n        }\n      })];\n    }\n  }]);\n\n  return Search;\n}(Extension);\n\nvar TrailingNode = /*#__PURE__*/function (_Extension) {\n  _inherits(TrailingNode, _Extension);\n\n  var _super = _createSuper(TrailingNode);\n\n  function TrailingNode() {\n    _classCallCheck(this, TrailingNode);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(TrailingNode, [{\n    key: \"name\",\n    get: function get() {\n      return 'trailing_node';\n    }\n  }, {\n    key: \"defaultOptions\",\n    get: function get() {\n      return {\n        node: 'paragraph',\n        notAfter: ['paragraph']\n      };\n    }\n  }, {\n    key: \"plugins\",\n    get: function get() {\n      var _this = this;\n\n      var plugin = new PluginKey(this.name);\n      var disabledNodes = Object.entries(this.editor.schema.nodes).map(function (_ref) {\n        var _ref2 = _slicedToArray(_ref, 2),\n            value = _ref2[1];\n\n        return value;\n      }).filter(function (node) {\n        return _this.options.notAfter.includes(node.name);\n      });\n      return [new Plugin({\n        key: plugin,\n        view: function view() {\n          return {\n            update: function update(view) {\n              var state = view.state;\n              var insertNodeAtEnd = plugin.getState(state);\n\n              if (!insertNodeAtEnd) {\n                return;\n              }\n\n              var doc = state.doc,\n                  schema = state.schema,\n                  tr = state.tr;\n              var type = schema.nodes[_this.options.node];\n              var transaction = tr.insert(doc.content.size, type.create());\n              view.dispatch(transaction);\n            }\n          };\n        },\n        state: {\n          init: function init(_, state) {\n            var lastNode = state.tr.doc.lastChild;\n            return !nodeEqualsType({\n              node: lastNode,\n              types: disabledNodes\n            });\n          },\n          apply: function apply(tr, value) {\n            if (!tr.docChanged) {\n              return value;\n            }\n\n            var lastNode = tr.doc.lastChild;\n            return !nodeEqualsType({\n              node: lastNode,\n              types: disabledNodes\n            });\n          }\n        }\n      })];\n    }\n  }]);\n\n  return TrailingNode;\n}(Extension);\n\nexport { Blockquote, Bold, BulletList, Code, CodeBlock, CodeBlockHighlight, Collaboration, Focus, HardBreak, Heading, HighlightPlugin as Highlight, History, HorizontalRule, Image, Italic, Link, ListItem, Mention, OrderedList, Placeholder, Search, Strike, SuggestionsPlugin as Suggestions, Table, TableCell, TableHeader, TableRow, TodoItem, TodoList, TrailingNode, Underline };\n","const result = {}\nexport default result\n\nif (typeof navigator != \"undefined\" && typeof document != \"undefined\") {\n  const ie_edge = /Edge\\/(\\d+)/.exec(navigator.userAgent)\n  const ie_upto10 = /MSIE \\d/.test(navigator.userAgent)\n  const ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent)\n\n  result.mac = /Mac/.test(navigator.platform)\n  let ie = result.ie = !!(ie_upto10 || ie_11up || ie_edge)\n  result.ie_version = ie_upto10 ? document.documentMode || 6 : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : null\n  result.gecko = !ie && /gecko\\/(\\d+)/i.test(navigator.userAgent)\n  result.gecko_version = result.gecko && +(/Firefox\\/(\\d+)/.exec(navigator.userAgent) || [0, 0])[1]\n  let chrome = !ie && /Chrome\\/(\\d+)/.exec(navigator.userAgent)\n  result.chrome = !!chrome\n  result.chrome_version = chrome && +chrome[1]\n  result.ios = !ie && /AppleWebKit/.test(navigator.userAgent) && /Mobile\\/\\w+/.test(navigator.userAgent)\n  result.android = /Android \\d/.test(navigator.userAgent)\n  result.webkit = \"webkitFontSmoothing\" in document.documentElement.style\n  result.safari = /Apple Computer/.test(navigator.vendor)\n  result.webkit_version = result.webkit && +(/\\bAppleWebKit\\/(\\d+)/.exec(navigator.userAgent) || [0, 0])[1]\n}\n","import browser from \"./browser\"\n\nexport const domIndex = function(node) {\n  for (var index = 0;; index++) {\n    node = node.previousSibling\n    if (!node) return index\n  }\n}\n\nexport const parentNode = function(node) {\n  let parent = node.parentNode\n  return parent && parent.nodeType == 11 ? parent.host : parent\n}\n\nexport const textRange = function(node, from, to) {\n  let range = document.createRange()\n  range.setEnd(node, to == null ? node.nodeValue.length : to)\n  range.setStart(node, from || 0)\n  return range\n}\n\n// Scans forward and backward through DOM positions equivalent to the\n// given one to see if the two are in the same place (i.e. after a\n// text node vs at the end of that text node)\nexport const isEquivalentPosition = function(node, off, targetNode, targetOff) {\n  return targetNode && (scanFor(node, off, targetNode, targetOff, -1) ||\n                        scanFor(node, off, targetNode, targetOff, 1))\n}\n\nconst atomElements = /^(img|br|input|textarea|hr)$/i\n\nfunction scanFor(node, off, targetNode, targetOff, dir) {\n  for (;;) {\n    if (node == targetNode && off == targetOff) return true\n    if (off == (dir < 0 ? 0 : nodeSize(node))) {\n      let parent = node.parentNode\n      if (parent.nodeType != 1 || hasBlockDesc(node) || atomElements.test(node.nodeName) || node.contentEditable == \"false\")\n        return false\n      off = domIndex(node) + (dir < 0 ? 0 : 1)\n      node = parent\n    } else if (node.nodeType == 1) {\n      node = node.childNodes[off + (dir < 0 ? -1 : 0)]\n      if (node.contentEditable == \"false\") return false\n      off = dir < 0 ? nodeSize(node) : 0\n    } else {\n      return false\n    }\n  }\n}\n\nexport function nodeSize(node) {\n  return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length\n}\n\nexport function isOnEdge(node, offset, parent) {\n  for (let atStart = offset == 0, atEnd = offset == nodeSize(node); atStart || atEnd;) {\n    if (node == parent) return true\n    let index = domIndex(node)\n    node = node.parentNode\n    if (!node) return false\n    atStart = atStart && index == 0\n    atEnd = atEnd && index == nodeSize(node)\n  }\n}\n\nfunction hasBlockDesc(dom) {\n  let desc\n  for (let cur = dom; cur; cur = cur.parentNode) if (desc = cur.pmViewDesc) break\n  return desc && desc.node && desc.node.isBlock && (desc.dom == dom || desc.contentDOM == dom)\n}\n\n// Work around Chrome issue https://bugs.chromium.org/p/chromium/issues/detail?id=447523\n// (isCollapsed inappropriately returns true in shadow dom)\nexport const selectionCollapsed = function(domSel) {\n  let collapsed = domSel.isCollapsed\n  if (collapsed && browser.chrome && domSel.rangeCount && !domSel.getRangeAt(0).collapsed)\n    collapsed = false\n  return collapsed\n}\n\nexport function keyEvent(keyCode, key) {\n  let event = document.createEvent(\"Event\")\n  event.initEvent(\"keydown\", true, true)\n  event.keyCode = keyCode\n  event.key = event.code = key\n  return event\n}\n","import {nodeSize, textRange, parentNode} from \"./dom\"\nimport browser from \"./browser\"\n\nfunction windowRect(doc) {\n  return {left: 0, right: doc.documentElement.clientWidth,\n          top: 0, bottom: doc.documentElement.clientHeight}\n}\n\nfunction getSide(value, side) {\n  return typeof value == \"number\" ? value : value[side]\n}\n\nfunction clientRect(node) {\n  let rect = node.getBoundingClientRect()\n  // Make sure scrollbar width isn't included in the rectangle\n  return {left: rect.left, right: rect.left + node.clientWidth,\n          top: rect.top, bottom: rect.top + node.clientHeight}\n}\n\nexport function scrollRectIntoView(view, rect, startDOM) {\n  let scrollThreshold = view.someProp(\"scrollThreshold\") || 0, scrollMargin = view.someProp(\"scrollMargin\") || 5\n  let doc = view.dom.ownerDocument\n  for (let parent = startDOM || view.dom;; parent = parentNode(parent)) {\n    if (!parent) break\n    if (parent.nodeType != 1) continue\n    let atTop = parent == doc.body || parent.nodeType != 1\n    let bounding = atTop ? windowRect(doc) : clientRect(parent)\n    let moveX = 0, moveY = 0\n    if (rect.top < bounding.top + getSide(scrollThreshold, \"top\"))\n      moveY = -(bounding.top - rect.top + getSide(scrollMargin, \"top\"))\n    else if (rect.bottom > bounding.bottom - getSide(scrollThreshold, \"bottom\"))\n      moveY = rect.bottom - bounding.bottom + getSide(scrollMargin, \"bottom\")\n    if (rect.left < bounding.left + getSide(scrollThreshold, \"left\"))\n      moveX = -(bounding.left - rect.left + getSide(scrollMargin, \"left\"))\n    else if (rect.right > bounding.right - getSide(scrollThreshold, \"right\"))\n      moveX = rect.right - bounding.right + getSide(scrollMargin, \"right\")\n    if (moveX || moveY) {\n      if (atTop) {\n        doc.defaultView.scrollBy(moveX, moveY)\n      } else {\n        let startX = parent.scrollLeft, startY = parent.scrollTop\n        if (moveY) parent.scrollTop += moveY\n        if (moveX) parent.scrollLeft += moveX\n        let dX = parent.scrollLeft - startX, dY = parent.scrollTop - startY\n        rect = {left: rect.left - dX, top: rect.top - dY, right: rect.right - dX, bottom: rect.bottom - dY}\n      }\n    }\n    if (atTop) break\n  }\n}\n\n// Store the scroll position of the editor's parent nodes, along with\n// the top position of an element near the top of the editor, which\n// will be used to make sure the visible viewport remains stable even\n// when the size of the content above changes.\nexport function storeScrollPos(view) {\n  let rect = view.dom.getBoundingClientRect(), startY = Math.max(0, rect.top)\n  let refDOM, refTop\n  for (let x = (rect.left + rect.right) / 2, y = startY + 1;\n       y < Math.min(innerHeight, rect.bottom); y += 5) {\n    let dom = view.root.elementFromPoint(x, y)\n    if (dom == view.dom || !view.dom.contains(dom)) continue\n    let localRect = dom.getBoundingClientRect()\n    if (localRect.top >= startY - 20) {\n      refDOM = dom\n      refTop = localRect.top\n      break\n    }\n  }\n  return {refDOM, refTop, stack: scrollStack(view.dom)}\n}\n\nfunction scrollStack(dom) {\n  let stack = [], doc = dom.ownerDocument\n  for (; dom; dom = parentNode(dom)) {\n    stack.push({dom, top: dom.scrollTop, left: dom.scrollLeft})\n    if (dom == doc) break\n  }\n  return stack\n}\n\n// Reset the scroll position of the editor's parent nodes to that what\n// it was before, when storeScrollPos was called.\nexport function resetScrollPos({refDOM, refTop, stack}) {\n  let newRefTop = refDOM ? refDOM.getBoundingClientRect().top : 0\n  restoreScrollStack(stack, newRefTop == 0 ? 0 : newRefTop - refTop)\n}\n\nfunction restoreScrollStack(stack, dTop) {\n  for (let i = 0; i < stack.length; i++) {\n    let {dom, top, left} = stack[i]\n    if (dom.scrollTop != top + dTop) dom.scrollTop = top + dTop\n    if (dom.scrollLeft != left) dom.scrollLeft = left\n  }\n}\n\nlet preventScrollSupported = null\n// Feature-detects support for .focus({preventScroll: true}), and uses\n// a fallback kludge when not supported.\nexport function focusPreventScroll(dom) {\n  if (dom.setActive) return dom.setActive() // in IE\n  if (preventScrollSupported) return dom.focus(preventScrollSupported)\n\n  let stored = scrollStack(dom)\n  dom.focus(preventScrollSupported == null ? {\n    get preventScroll() {\n      preventScrollSupported = {preventScroll: true}\n      return true\n    }\n  } : undefined)\n  if (!preventScrollSupported) {\n    preventScrollSupported = false\n    restoreScrollStack(stored, 0)\n  }\n}\n\nfunction findOffsetInNode(node, coords) {\n  let closest, dxClosest = 2e8, coordsClosest, offset = 0\n  let rowBot = coords.top, rowTop = coords.top\n  for (let child = node.firstChild, childIndex = 0; child; child = child.nextSibling, childIndex++) {\n    let rects\n    if (child.nodeType == 1) rects = child.getClientRects()\n    else if (child.nodeType == 3) rects = textRange(child).getClientRects()\n    else continue\n\n    for (let i = 0; i < rects.length; i++) {\n      let rect = rects[i]\n      if (rect.top <= rowBot && rect.bottom >= rowTop) {\n        rowBot = Math.max(rect.bottom, rowBot)\n        rowTop = Math.min(rect.top, rowTop)\n        let dx = rect.left > coords.left ? rect.left - coords.left\n            : rect.right < coords.left ? coords.left - rect.right : 0\n        if (dx < dxClosest) {\n          closest = child\n          dxClosest = dx\n          coordsClosest = dx && closest.nodeType == 3 ? {left: rect.right < coords.left ? rect.right : rect.left, top: coords.top} : coords\n          if (child.nodeType == 1 && dx)\n            offset = childIndex + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0)\n          continue\n        }\n      }\n      if (!closest && (coords.left >= rect.right && coords.top >= rect.top ||\n                       coords.left >= rect.left && coords.top >= rect.bottom))\n        offset = childIndex + 1\n    }\n  }\n  if (closest && closest.nodeType == 3) return findOffsetInText(closest, coordsClosest)\n  if (!closest || (dxClosest && closest.nodeType == 1)) return {node, offset}\n  return findOffsetInNode(closest, coordsClosest)\n}\n\nfunction findOffsetInText(node, coords) {\n  let len = node.nodeValue.length\n  let range = document.createRange()\n  for (let i = 0; i < len; i++) {\n    range.setEnd(node, i + 1)\n    range.setStart(node, i)\n    let rect = singleRect(range, 1)\n    if (rect.top == rect.bottom) continue\n    if (inRect(coords, rect))\n      return {node, offset: i + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0)}\n  }\n  return {node, offset: 0}\n}\n\nfunction inRect(coords, rect) {\n  return coords.left >= rect.left - 1 && coords.left <= rect.right + 1&&\n    coords.top >= rect.top - 1 && coords.top <= rect.bottom + 1\n}\n\nfunction targetKludge(dom, coords) {\n  let parent = dom.parentNode\n  if (parent && /^li$/i.test(parent.nodeName) && coords.left < dom.getBoundingClientRect().left)\n    return parent\n  return dom\n}\n\nfunction posFromElement(view, elt, coords) {\n  let {node, offset} = findOffsetInNode(elt, coords), bias = -1\n  if (node.nodeType == 1 && !node.firstChild) {\n    let rect = node.getBoundingClientRect()\n    bias = rect.left != rect.right && coords.left > (rect.left + rect.right) / 2 ? 1 : -1\n  }\n  return view.docView.posFromDOM(node, offset, bias)\n}\n\nfunction posFromCaret(view, node, offset, coords) {\n  // Browser (in caretPosition/RangeFromPoint) will agressively\n  // normalize towards nearby inline nodes. Since we are interested in\n  // positions between block nodes too, we first walk up the hierarchy\n  // of nodes to see if there are block nodes that the coordinates\n  // fall outside of. If so, we take the position before/after that\n  // block. If not, we call `posFromDOM` on the raw node/offset.\n  let outside = -1\n  for (let cur = node;;) {\n    if (cur == view.dom) break\n    let desc = view.docView.nearestDesc(cur, true)\n    if (!desc) return null\n    if (desc.node.isBlock && desc.parent) {\n      let rect = desc.dom.getBoundingClientRect()\n      if (rect.left > coords.left || rect.top > coords.top) outside = desc.posBefore\n      else if (rect.right < coords.left || rect.bottom < coords.top) outside = desc.posAfter\n      else break\n    }\n    cur = desc.dom.parentNode\n  }\n  return outside > -1 ? outside : view.docView.posFromDOM(node, offset)\n}\n\nfunction elementFromPoint(element, coords, box) {\n  let len = element.childNodes.length\n  if (len && box.top < box.bottom) {\n    for (let startI = Math.max(0, Math.min(len - 1, Math.floor(len * (coords.top - box.top) / (box.bottom - box.top)) - 2)), i = startI;;) {\n      let child = element.childNodes[i]\n      if (child.nodeType == 1) {\n        let rects = child.getClientRects()\n        for (let j = 0; j < rects.length; j++) {\n          let rect = rects[j]\n          if (inRect(coords, rect)) return elementFromPoint(child, coords, rect)\n        }\n      }\n      if ((i = (i + 1) % len) == startI) break\n    }\n  }\n  return element\n}\n\n// Given an x,y position on the editor, get the position in the document.\nexport function posAtCoords(view, coords) {\n  let root = view.root, node, offset\n  if (root.caretPositionFromPoint) {\n    try { // Firefox throws for this call in hard-to-predict circumstances (#994)\n      let pos = root.caretPositionFromPoint(coords.left, coords.top)\n      if (pos) ({offsetNode: node, offset} = pos)\n    } catch (_) {}\n  }\n  if (!node && root.caretRangeFromPoint) {\n    let range = root.caretRangeFromPoint(coords.left, coords.top)\n    if (range) ({startContainer: node, startOffset: offset} = range)\n  }\n\n  let elt = root.elementFromPoint(coords.left, coords.top + 1), pos\n  if (!elt || !view.dom.contains(elt.nodeType != 1 ? elt.parentNode : elt)) {\n    let box = view.dom.getBoundingClientRect()\n    if (!inRect(coords, box)) return null\n    elt = elementFromPoint(view.dom, coords, box)\n    if (!elt) return null\n  }\n  // Safari's caretRangeFromPoint returns nonsense when on a draggable element\n  if (browser.safari && elt.draggable) node = offset = null\n  elt = targetKludge(elt, coords)\n  if (node) {\n    if (browser.gecko && node.nodeType == 1) {\n      // Firefox will sometimes return offsets into <input> nodes, which\n      // have no actual children, from caretPositionFromPoint (#953)\n      offset = Math.min(offset, node.childNodes.length)\n      // It'll also move the returned position before image nodes,\n      // even if those are behind it.\n      if (offset < node.childNodes.length) {\n        let next = node.childNodes[offset], box\n        if (next.nodeName == \"IMG\" && (box = next.getBoundingClientRect()).right <= coords.left &&\n            box.bottom > coords.top)\n          offset++\n      }\n    }\n    // Suspiciously specific kludge to work around caret*FromPoint\n    // never returning a position at the end of the document\n    if (node == view.dom && offset == node.childNodes.length - 1 && node.lastChild.nodeType == 1 &&\n        coords.top > node.lastChild.getBoundingClientRect().bottom)\n      pos = view.state.doc.content.size\n    // Ignore positions directly after a BR, since caret*FromPoint\n    // 'round up' positions that would be more accurately placed\n    // before the BR node.\n    else if (offset == 0 || node.nodeType != 1 || node.childNodes[offset - 1].nodeName != \"BR\")\n      pos = posFromCaret(view, node, offset, coords)\n  }\n  if (pos == null) pos = posFromElement(view, elt, coords)\n\n  let desc = view.docView.nearestDesc(elt, true)\n  return {pos, inside: desc ? desc.posAtStart - desc.border : -1}\n}\n\nfunction singleRect(object, bias) {\n  let rects = object.getClientRects()\n  return !rects.length ? object.getBoundingClientRect() : rects[bias < 0 ? 0 : rects.length - 1]\n}\n\n// : (EditorView, number) → {left: number, top: number, right: number, bottom: number}\n// Given a position in the document model, get a bounding box of the\n// character at that position, relative to the window.\nexport function coordsAtPos(view, pos) {\n  let {node, offset} = view.docView.domFromPos(pos)\n\n  // These browsers support querying empty text ranges\n  if (node.nodeType == 3 && (browser.webkit || browser.gecko)) {\n    let rect = singleRect(textRange(node, offset, offset), 0)\n    // Firefox returns bad results (the position before the space)\n    // when querying a position directly after line-broken\n    // whitespace. Detect this situation and and kludge around it\n    if (browser.gecko && offset && /\\s/.test(node.nodeValue[offset - 1]) && offset < node.nodeValue.length) {\n      let rectBefore = singleRect(textRange(node, offset - 1, offset - 1), -1)\n      if (rectBefore.top == rect.top) {\n        let rectAfter = singleRect(textRange(node, offset, offset + 1), -1)\n        if (rectAfter.top != rect.top)\n          return flattenV(rectAfter, rectAfter.left < rectBefore.left)\n      }\n    }\n    return rect\n  }\n\n  if (node.nodeType == 1 && !view.state.doc.resolve(pos).parent.inlineContent) {\n    // Return a horizontal line in block context\n    let top = true, rect\n    if (offset < node.childNodes.length) {\n      let after = node.childNodes[offset]\n      if (after.nodeType == 1) rect = after.getBoundingClientRect()\n    }\n    if (!rect && offset) {\n      let before = node.childNodes[offset - 1]\n      if (before.nodeType == 1) { rect = before.getBoundingClientRect(); top = false }\n    }\n    return flattenH(rect || node.getBoundingClientRect(), top)\n  }\n\n  // Not Firefox/Chrome, or not in a text node, so we have to use\n  // actual element/character rectangles to get a solution (this part\n  // is not very bidi-safe)\n  //\n  // Try the left side first, fall back to the right one if that\n  // doesn't work.\n  for (let dir = -1; dir < 2; dir += 2) {\n    if (dir < 0 && offset) {\n      let prev, target = node.nodeType == 3 ? textRange(node, offset - 1, offset)\n          : (prev = node.childNodes[offset - 1]).nodeType == 3 ? textRange(prev)\n          : prev.nodeType == 1 && prev.nodeName != \"BR\" ? prev : null // BR nodes tend to only return the rectangle before them\n      if (target) {\n        let rect = singleRect(target, 1)\n        if (rect.top < rect.bottom) return flattenV(rect, false)\n      }\n    } else if (dir > 0 && offset < nodeSize(node)) {\n      let next, target = node.nodeType == 3 ? textRange(node, offset, offset + 1)\n          : (next = node.childNodes[offset]).nodeType == 3 ? textRange(next)\n          : next.nodeType == 1 ? next : null\n      if (target) {\n        let rect = singleRect(target, -1)\n        if (rect.top < rect.bottom) return flattenV(rect, true)\n      }\n    }\n  }\n  // All else failed, just try to get a rectangle for the target node\n  return flattenV(singleRect(node.nodeType == 3 ? textRange(node) : node, 0), false)\n}\n\nfunction flattenV(rect, left) {\n  if (rect.width == 0) return rect\n  let x = left ? rect.left : rect.right\n  return {top: rect.top, bottom: rect.bottom, left: x, right: x}\n}\n\nfunction flattenH(rect, top) {\n  if (rect.height == 0) return rect\n  let y = top ? rect.top : rect.bottom\n  return {top: y, bottom: y, left: rect.left, right: rect.right}\n}\n\nfunction withFlushedState(view, state, f) {\n  let viewState = view.state, active = view.root.activeElement\n  if (viewState != state) view.updateState(state)\n  if (active != view.dom) view.focus()\n  try {\n    return f()\n  } finally {\n    if (viewState != state) view.updateState(viewState)\n    if (active != view.dom && active) active.focus()\n  }\n}\n\n// : (EditorView, number, number)\n// Whether vertical position motion in a given direction\n// from a position would leave a text block.\nfunction endOfTextblockVertical(view, state, dir) {\n  let sel = state.selection\n  let $pos = dir == \"up\" ? sel.$anchor.min(sel.$head) : sel.$anchor.max(sel.$head)\n  return withFlushedState(view, state, () => {\n    let {node: dom} = view.docView.domFromPos($pos.pos)\n    for (;;) {\n      let nearest = view.docView.nearestDesc(dom, true)\n      if (!nearest) break\n      if (nearest.node.isBlock) { dom = nearest.dom; break }\n      dom = nearest.dom.parentNode\n    }\n    let coords = coordsAtPos(view, $pos.pos)\n    for (let child = dom.firstChild; child; child = child.nextSibling) {\n      let boxes\n      if (child.nodeType == 1) boxes = child.getClientRects()\n      else if (child.nodeType == 3) boxes = textRange(child, 0, child.nodeValue.length).getClientRects()\n      else continue\n      for (let i = 0; i < boxes.length; i++) {\n        let box = boxes[i]\n        if (box.bottom > box.top && (dir == \"up\" ? box.bottom < coords.top + 1 : box.top > coords.bottom - 1))\n          return false\n      }\n    }\n    return true\n  })\n}\n\nconst maybeRTL = /[\\u0590-\\u08ac]/\n\nfunction endOfTextblockHorizontal(view, state, dir) {\n  let {$head} = state.selection\n  if (!$head.parent.isTextblock) return false\n  let offset = $head.parentOffset, atStart = !offset, atEnd = offset == $head.parent.content.size\n  let sel = getSelection()\n  // If the textblock is all LTR, or the browser doesn't support\n  // Selection.modify (Edge), fall back to a primitive approach\n  if (!maybeRTL.test($head.parent.textContent) || !sel.modify)\n    return dir == \"left\" || dir == \"backward\" ? atStart : atEnd\n\n  return withFlushedState(view, state, () => {\n    // This is a huge hack, but appears to be the best we can\n    // currently do: use `Selection.modify` to move the selection by\n    // one character, and see if that moves the cursor out of the\n    // textblock (or doesn't move it at all, when at the start/end of\n    // the document).\n    let oldRange = sel.getRangeAt(0), oldNode = sel.focusNode, oldOff = sel.focusOffset\n    let oldBidiLevel = sel.caretBidiLevel // Only for Firefox\n    sel.modify(\"move\", dir, \"character\")\n    let parentDOM = $head.depth ? view.docView.domAfterPos($head.before()) : view.dom\n    let result = !parentDOM.contains(sel.focusNode.nodeType == 1 ? sel.focusNode : sel.focusNode.parentNode) ||\n        (oldNode == sel.focusNode && oldOff == sel.focusOffset)\n    // Restore the previous selection\n    sel.removeAllRanges()\n    sel.addRange(oldRange)\n    if (oldBidiLevel != null) sel.caretBidiLevel = oldBidiLevel\n    return result\n  })\n}\n\nlet cachedState = null, cachedDir = null, cachedResult = false\nexport function endOfTextblock(view, state, dir) {\n  if (cachedState == state && cachedDir == dir) return cachedResult\n  cachedState = state; cachedDir = dir\n  return cachedResult = dir == \"up\" || dir == \"down\"\n    ? endOfTextblockVertical(view, state, dir)\n    : endOfTextblockHorizontal(view, state, dir)\n}\n","import {DOMSerializer, Fragment, Mark} from \"prosemirror-model\"\nimport {TextSelection} from \"prosemirror-state\"\n\nimport {domIndex, isEquivalentPosition, nodeSize} from \"./dom\"\nimport browser from \"./browser\"\n\n// NodeView:: interface\n//\n// By default, document nodes are rendered using the result of the\n// [`toDOM`](#model.NodeSpec.toDOM) method of their spec, and managed\n// entirely by the editor. For some use cases, such as embedded\n// node-specific editing interfaces, you want more control over\n// the behavior of a node's in-editor representation, and need to\n// [define](#view.EditorProps.nodeViews) a custom node view.\n//\n// Mark views only support `dom` and `contentDOM`, and don't support\n// any of the node view methods.\n//\n// Objects returned as node views must conform to this interface.\n//\n//   dom:: ?dom.Node\n//   The outer DOM node that represents the document node. When not\n//   given, the default strategy is used to create a DOM node.\n//\n//   contentDOM:: ?dom.Node\n//   The DOM node that should hold the node's content. Only meaningful\n//   if the node view also defines a `dom` property and if its node\n//   type is not a leaf node type. When this is present, ProseMirror\n//   will take care of rendering the node's children into it. When it\n//   is not present, the node view itself is responsible for rendering\n//   (or deciding not to render) its child nodes.\n//\n//   update:: ?(node: Node, decorations: [Decoration]) → bool\n//   When given, this will be called when the view is updating itself.\n//   It will be given a node (possibly of a different type), and an\n//   array of active decorations (which are automatically drawn, and\n//   the node view may ignore if it isn't interested in them), and\n//   should return true if it was able to update to that node, and\n//   false otherwise. If the node view has a `contentDOM` property (or\n//   no `dom` property), updating its child nodes will be handled by\n//   ProseMirror.\n//\n//   selectNode:: ?()\n//   Can be used to override the way the node's selected status (as a\n//   node selection) is displayed.\n//\n//   deselectNode:: ?()\n//   When defining a `selectNode` method, you should also provide a\n//   `deselectNode` method to remove the effect again.\n//\n//   setSelection:: ?(anchor: number, head: number, root: dom.Document)\n//   This will be called to handle setting the selection inside the\n//   node. The `anchor` and `head` positions are relative to the start\n//   of the node. By default, a DOM selection will be created between\n//   the DOM positions corresponding to those positions, but if you\n//   override it you can do something else.\n//\n//   stopEvent:: ?(event: dom.Event) → bool\n//   Can be used to prevent the editor view from trying to handle some\n//   or all DOM events that bubble up from the node view. Events for\n//   which this returns true are not handled by the editor.\n//\n//   ignoreMutation:: ?(dom.MutationRecord) → bool\n//   Called when a DOM\n//   [mutation](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver)\n//   or a selection change happens within the view. When the change is\n//   a selection change, the record will have a `type` property of\n//   `\"selection\"` (which doesn't occur for native mutation records).\n//   Return false if the editor should re-read the selection or\n//   re-parse the range around the mutation, true if it can safely be\n//   ignored.\n//\n//   destroy:: ?()\n//   Called when the node view is removed from the editor or the whole\n//   editor is destroyed.\n\n// View descriptions are data structures that describe the DOM that is\n// used to represent the editor's content. They are used for:\n//\n// - Incremental redrawing when the document changes\n//\n// - Figuring out what part of the document a given DOM position\n//   corresponds to\n//\n// - Wiring in custom implementations of the editing interface for a\n//   given node\n//\n// They form a doubly-linked mutable tree, starting at `view.docView`.\n\nconst NOT_DIRTY = 0, CHILD_DIRTY = 1, CONTENT_DIRTY = 2, NODE_DIRTY = 3\n\n// Superclass for the various kinds of descriptions. Defines their\n// basic structure and shared methods.\nclass ViewDesc {\n  // : (?ViewDesc, [ViewDesc], dom.Node, ?dom.Node)\n  constructor(parent, children, dom, contentDOM) {\n    this.parent = parent\n    this.children = children\n    this.dom = dom\n    // An expando property on the DOM node provides a link back to its\n    // description.\n    dom.pmViewDesc = this\n    // This is the node that holds the child views. It may be null for\n    // descs that don't have children.\n    this.contentDOM = contentDOM\n    this.dirty = NOT_DIRTY\n  }\n\n  // Used to check whether a given description corresponds to a\n  // widget/mark/node.\n  matchesWidget() { return false }\n  matchesMark() { return false }\n  matchesNode() { return false }\n  matchesHack() { return false }\n\n  get beforePosition() { return false }\n\n  // : () → ?ParseRule\n  // When parsing in-editor content (in domchange.js), we allow\n  // descriptions to determine the parse rules that should be used to\n  // parse them.\n  parseRule() { return null }\n\n  // : (dom.Event) → bool\n  // Used by the editor's event handler to ignore events that come\n  // from certain descs.\n  stopEvent() { return false }\n\n  // The size of the content represented by this desc.\n  get size() {\n    let size = 0\n    for (let i = 0; i < this.children.length; i++) size += this.children[i].size\n    return size\n  }\n\n  // For block nodes, this represents the space taken up by their\n  // start/end tokens.\n  get border() { return 0 }\n\n  destroy() {\n    this.parent = null\n    if (this.dom.pmViewDesc == this) this.dom.pmViewDesc = null\n    for (let i = 0; i < this.children.length; i++)\n      this.children[i].destroy()\n  }\n\n  posBeforeChild(child) {\n    for (let i = 0, pos = this.posAtStart; i < this.children.length; i++) {\n      let cur = this.children[i]\n      if (cur == child) return pos\n      pos += cur.size\n    }\n  }\n\n  get posBefore() {\n    return this.parent.posBeforeChild(this)\n  }\n\n  get posAtStart() {\n    return this.parent ? this.parent.posBeforeChild(this) + this.border : 0\n  }\n\n  get posAfter() {\n    return this.posBefore + this.size\n  }\n\n  get posAtEnd() {\n    return this.posAtStart + this.size - 2 * this.border\n  }\n\n  // : (dom.Node, number, ?number) → number\n  localPosFromDOM(dom, offset, bias) {\n    // If the DOM position is in the content, use the child desc after\n    // it to figure out a position.\n    if (this.contentDOM && this.contentDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode)) {\n      if (bias < 0) {\n        let domBefore, desc\n        if (dom == this.contentDOM) {\n          domBefore = dom.childNodes[offset - 1]\n        } else {\n          while (dom.parentNode != this.contentDOM) dom = dom.parentNode\n          domBefore = dom.previousSibling\n        }\n        while (domBefore && !((desc = domBefore.pmViewDesc) && desc.parent == this)) domBefore = domBefore.previousSibling\n        return domBefore ? this.posBeforeChild(desc) + desc.size : this.posAtStart\n      } else {\n        let domAfter, desc\n        if (dom == this.contentDOM) {\n          domAfter = dom.childNodes[offset]\n        } else {\n          while (dom.parentNode != this.contentDOM) dom = dom.parentNode\n          domAfter = dom.nextSibling\n        }\n        while (domAfter && !((desc = domAfter.pmViewDesc) && desc.parent == this)) domAfter = domAfter.nextSibling\n        return domAfter ? this.posBeforeChild(desc) : this.posAtEnd\n      }\n    }\n    // Otherwise, use various heuristics, falling back on the bias\n    // parameter, to determine whether to return the position at the\n    // start or at the end of this view desc.\n    let atEnd\n    if (this.contentDOM && this.contentDOM != this.dom && this.dom.contains(this.contentDOM)) {\n      atEnd = dom.compareDocumentPosition(this.contentDOM) & 2\n    } else if (this.dom.firstChild) {\n      if (offset == 0) for (let search = dom;; search = search.parentNode) {\n        if (search == this.dom) { atEnd = false; break }\n        if (search.parentNode.firstChild != search) break\n      }\n      if (atEnd == null && offset == dom.childNodes.length) for (let search = dom;; search = search.parentNode) {\n        if (search == this.dom) { atEnd = true; break }\n        if (search.parentNode.lastChild != search) break\n      }\n    }\n    return (atEnd == null ? bias > 0 : atEnd) ? this.posAtEnd : this.posAtStart\n  }\n\n  // Scan up the dom finding the first desc that is a descendant of\n  // this one.\n  nearestDesc(dom, onlyNodes) {\n    for (let first = true, cur = dom; cur; cur = cur.parentNode) {\n      let desc = this.getDesc(cur)\n      if (desc && (!onlyNodes || desc.node)) {\n        // If dom is outside of this desc's nodeDOM, don't count it.\n        if (first && desc.nodeDOM &&\n            !(desc.nodeDOM.nodeType == 1 ? desc.nodeDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode) : desc.nodeDOM == dom))\n          first = false\n        else\n          return desc\n      }\n    }\n  }\n\n  getDesc(dom) {\n    let desc = dom.pmViewDesc\n    for (let cur = desc; cur; cur = cur.parent) if (cur == this) return desc\n  }\n\n  posFromDOM(dom, offset, bias) {\n    for (let scan = dom; scan; scan = scan.parentNode) {\n      let desc = this.getDesc(scan)\n      if (desc) return desc.localPosFromDOM(dom, offset, bias)\n    }\n    return -1\n  }\n\n  // : (number) → ?NodeViewDesc\n  // Find the desc for the node after the given pos, if any. (When a\n  // parent node overrode rendering, there might not be one.)\n  descAt(pos) {\n    for (let i = 0, offset = 0; i < this.children.length; i++) {\n      let child = this.children[i], end = offset + child.size\n      if (offset == pos && end != offset) {\n        while (!child.border && child.children.length) child = child.children[0]\n        return child\n      }\n      if (pos < end) return child.descAt(pos - offset - child.border)\n      offset = end\n    }\n  }\n\n  // : (number) → {node: dom.Node, offset: number}\n  domFromPos(pos) {\n    if (!this.contentDOM) return {node: this.dom, offset: 0}\n    for (let offset = 0, i = 0;; i++) {\n      if (offset == pos) {\n        while (i < this.children.length && (this.children[i].beforePosition || this.children[i].dom.parentNode != this.contentDOM)) i++\n        return {node: this.contentDOM,\n                offset: i == this.children.length ? this.contentDOM.childNodes.length : domIndex(this.children[i].dom)}\n      }\n      if (i == this.children.length) throw new Error(\"Invalid position \" + pos)\n      let child = this.children[i], end = offset + child.size\n      if (pos < end) return child.domFromPos(pos - offset - child.border)\n      offset = end\n    }\n  }\n\n  // Used to find a DOM range in a single parent for a given changed\n  // range.\n  parseRange(from, to, base = 0) {\n    if (this.children.length == 0)\n      return {node: this.contentDOM, from, to, fromOffset: 0, toOffset: this.contentDOM.childNodes.length}\n\n    let fromOffset = -1, toOffset = -1\n    for (let offset = base, i = 0;; i++) {\n      let child = this.children[i], end = offset + child.size\n      if (fromOffset == -1 && from <= end) {\n        let childBase = offset + child.border\n        // FIXME maybe descend mark views to parse a narrower range?\n        if (from >= childBase && to <= end - child.border && child.node &&\n            child.contentDOM && this.contentDOM.contains(child.contentDOM))\n          return child.parseRange(from, to, childBase)\n\n        from = offset\n        for (let j = i; j > 0; j--) {\n          let prev = this.children[j - 1]\n          if (prev.size && prev.dom.parentNode == this.contentDOM && !prev.emptyChildAt(1)) {\n            fromOffset = domIndex(prev.dom) + 1\n            break\n          }\n          from -= prev.size\n        }\n        if (fromOffset == -1) fromOffset = 0\n      }\n      if (fromOffset > -1 && (end > to || i == this.children.length - 1)) {\n        to = end\n        for (let j = i + 1; j < this.children.length; j++) {\n          let next = this.children[j]\n          if (next.size && next.dom.parentNode == this.contentDOM && !next.emptyChildAt(-1)) {\n            toOffset = domIndex(next.dom)\n            break\n          }\n          to += next.size\n        }\n        if (toOffset == -1) toOffset = this.contentDOM.childNodes.length\n        break\n      }\n      offset = end\n    }\n    return {node: this.contentDOM, from, to, fromOffset, toOffset}\n  }\n\n  emptyChildAt(side) {\n    if (this.border || !this.contentDOM || !this.children.length) return false\n    let child = this.children[side < 0 ? 0 : this.children.length - 1]\n    return child.size == 0 || child.emptyChildAt(side)\n  }\n\n  // : (number) → dom.Node\n  domAfterPos(pos) {\n    let {node, offset} = this.domFromPos(pos)\n    if (node.nodeType != 1 || offset == node.childNodes.length)\n      throw new RangeError(\"No node after pos \" + pos)\n    return node.childNodes[offset]\n  }\n\n  // : (number, number, dom.Document)\n  // View descs are responsible for setting any selection that falls\n  // entirely inside of them, so that custom implementations can do\n  // custom things with the selection. Note that this falls apart when\n  // a selection starts in such a node and ends in another, in which\n  // case we just use whatever domFromPos produces as a best effort.\n  setSelection(anchor, head, root, force) {\n    // If the selection falls entirely in a child, give it to that child\n    let from = Math.min(anchor, head), to = Math.max(anchor, head)\n    for (let i = 0, offset = 0; i < this.children.length; i++) {\n      let child = this.children[i], end = offset + child.size\n      if (from > offset && to < end)\n        return child.setSelection(anchor - offset - child.border, head - offset - child.border, root, force)\n      offset = end\n    }\n\n    let anchorDOM = this.domFromPos(anchor), headDOM = this.domFromPos(head)\n    let domSel = root.getSelection()\n\n    if (!force &&\n        isEquivalentPosition(anchorDOM.node, anchorDOM.offset, domSel.anchorNode, domSel.anchorOffset) &&\n        isEquivalentPosition(headDOM.node, headDOM.offset, domSel.focusNode, domSel.focusOffset))\n      return\n\n    // Selection.extend can be used to create an 'inverted' selection\n    // (one where the focus is before the anchor), but not all\n    // browsers support it yet.\n    let domSelExtended = false\n    if (domSel.extend || anchor == head) {\n      domSel.collapse(anchorDOM.node, anchorDOM.offset)\n      try {\n        if (anchor != head) domSel.extend(headDOM.node, headDOM.offset)\n        domSelExtended = true\n      } catch (err) {\n        // In some cases with Chrome the selection is empty after calling\n        // collapse, even when it should be valid. This appears to be a bug, but\n        // it is difficult to isolate. If this happens fallback to the old path\n        // without using extend.\n        if (!(err instanceof DOMException)) throw err\n      }\n    }\n    if (!domSelExtended) {\n      if (anchor > head) { let tmp = anchorDOM; anchorDOM = headDOM; headDOM = tmp }\n      let range = document.createRange()\n      range.setEnd(headDOM.node, headDOM.offset)\n      range.setStart(anchorDOM.node, anchorDOM.offset)\n      domSel.removeAllRanges()\n      domSel.addRange(range)\n    }\n  }\n\n  // : (dom.MutationRecord) → bool\n  ignoreMutation(mutation) {\n    return !this.contentDOM && mutation.type != \"selection\"\n  }\n\n  get contentLost() {\n    return this.contentDOM && this.contentDOM != this.dom && !this.dom.contains(this.contentDOM)\n  }\n\n  // Remove a subtree of the element tree that has been touched\n  // by a DOM change, so that the next update will redraw it.\n  markDirty(from, to) {\n    for (let offset = 0, i = 0; i < this.children.length; i++) {\n      let child = this.children[i], end = offset + child.size\n      if (offset == end ? from <= end && to >= offset : from < end && to > offset) {\n        let startInside = offset + child.border, endInside = end - child.border\n        if (from >= startInside && to <= endInside) {\n          this.dirty = from == offset || to == end ? CONTENT_DIRTY : CHILD_DIRTY\n          if (from == startInside && to == endInside &&\n              (child.contentLost || child.dom.parentNode != this.contentDOM)) child.dirty = NODE_DIRTY\n          else child.markDirty(from - startInside, to - startInside)\n          return\n        } else {\n          child.dirty = NODE_DIRTY\n        }\n      }\n      offset = end\n    }\n    this.dirty = CONTENT_DIRTY\n  }\n\n  markParentsDirty() {\n    let level = 1\n    for (let node = this.parent; node; node = node.parent, level++) {\n      let dirty = level == 1 ? CONTENT_DIRTY : CHILD_DIRTY\n      if (node.dirty < dirty) node.dirty = dirty\n    }\n  }\n}\n\n// Reused array to avoid allocating fresh arrays for things that will\n// stay empty anyway.\nconst nothing = []\n\n// A widget desc represents a widget decoration, which is a DOM node\n// drawn between the document nodes.\nclass WidgetViewDesc extends ViewDesc {\n  // : (ViewDesc, Decoration)\n  constructor(parent, widget, view, pos) {\n    let self, dom = widget.type.toDOM\n    if (typeof dom == \"function\") dom = dom(view, () => {\n      if (!self) return pos\n      if (self.parent) return self.parent.posBeforeChild(self)\n    })\n    if (!widget.type.spec.raw) {\n      if (dom.nodeType != 1) {\n        let wrap = document.createElement(\"span\")\n        wrap.appendChild(dom)\n        dom = wrap\n      }\n      dom.contentEditable = false\n      dom.classList.add(\"ProseMirror-widget\")\n    }\n    super(parent, nothing, dom, null)\n    this.widget = widget\n    self = this\n  }\n\n  get beforePosition() {\n    return this.widget.type.side < 0\n  }\n\n  matchesWidget(widget) {\n    return this.dirty == NOT_DIRTY && widget.type.eq(this.widget.type)\n  }\n\n  parseRule() { return {ignore: true} }\n\n  stopEvent(event) {\n    let stop = this.widget.spec.stopEvent\n    return stop ? stop(event) : false\n  }\n\n  ignoreMutation(mutation) {\n    return mutation.type != \"selection\" || this.widget.spec.ignoreSelection\n  }\n}\n\nclass CompositionViewDesc extends ViewDesc {\n  constructor(parent, dom, textDOM, text) {\n    super(parent, nothing, dom, null)\n    this.textDOM = textDOM\n    this.text = text\n  }\n\n  get size() { return this.text.length }\n\n  localPosFromDOM(dom, offset) {\n    if (dom != this.textDOM) return this.posAtStart + (offset ? this.size : 0)\n    return this.posAtStart + offset\n  }\n\n  domFromPos(pos) {\n    return {node: this.textDOM, offset: pos}\n  }\n\n  ignoreMutation(mut) {\n    return mut.type === 'characterData' && mut.target.nodeValue == mut.oldValue\n   }\n}\n\n// A mark desc represents a mark. May have multiple children,\n// depending on how the mark is split. Note that marks are drawn using\n// a fixed nesting order, for simplicity and predictability, so in\n// some cases they will be split more often than would appear\n// necessary.\nclass MarkViewDesc extends ViewDesc {\n  // : (ViewDesc, Mark, dom.Node)\n  constructor(parent, mark, dom, contentDOM) {\n    super(parent, [], dom, contentDOM)\n    this.mark = mark\n  }\n\n  static create(parent, mark, inline, view) {\n    let custom = view.nodeViews[mark.type.name]\n    let spec = custom && custom(mark, view, inline)\n    if (!spec || !spec.dom)\n      spec = DOMSerializer.renderSpec(document, mark.type.spec.toDOM(mark, inline))\n    return new MarkViewDesc(parent, mark, spec.dom, spec.contentDOM || spec.dom)\n  }\n\n  parseRule() { return {mark: this.mark.type.name, attrs: this.mark.attrs, contentElement: this.contentDOM} }\n\n  matchesMark(mark) { return this.dirty != NODE_DIRTY && this.mark.eq(mark) }\n\n  markDirty(from, to) {\n    super.markDirty(from, to)\n    // Move dirty info to nearest node view\n    if (this.dirty != NOT_DIRTY) {\n      let parent = this.parent\n      while (!parent.node) parent = parent.parent\n      if (parent.dirty < this.dirty) parent.dirty = this.dirty\n      this.dirty = NOT_DIRTY\n    }\n  }\n\n  slice(from, to, view) {\n    let copy = MarkViewDesc.create(this.parent, this.mark, true, view)\n    let nodes = this.children, size = this.size\n    if (to < size) nodes = replaceNodes(nodes, to, size, view)\n    if (from > 0) nodes = replaceNodes(nodes, 0, from, view)\n    for (let i = 0; i < nodes.length; i++) nodes[i].parent = copy\n    copy.children = nodes\n    return copy\n  }\n}\n\n// Node view descs are the main, most common type of view desc, and\n// correspond to an actual node in the document. Unlike mark descs,\n// they populate their child array themselves.\nclass NodeViewDesc extends ViewDesc {\n  // : (?ViewDesc, Node, [Decoration], DecorationSet, dom.Node, ?dom.Node, EditorView)\n  constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos) {\n    super(parent, node.isLeaf ? nothing : [], dom, contentDOM)\n    this.nodeDOM = nodeDOM\n    this.node = node\n    this.outerDeco = outerDeco\n    this.innerDeco = innerDeco\n    if (contentDOM) this.updateChildren(view, pos)\n  }\n\n  // By default, a node is rendered using the `toDOM` method from the\n  // node type spec. But client code can use the `nodeViews` spec to\n  // supply a custom node view, which can influence various aspects of\n  // the way the node works.\n  //\n  // (Using subclassing for this was intentionally decided against,\n  // since it'd require exposing a whole slew of finnicky\n  // implementation details to the user code that they probably will\n  // never need.)\n  static create(parent, node, outerDeco, innerDeco, view, pos) {\n    let custom = view.nodeViews[node.type.name], descObj\n    let spec = custom && custom(node, view, () => {\n      // (This is a function that allows the custom view to find its\n      // own position)\n      if (!descObj) return pos\n      if (descObj.parent) return descObj.parent.posBeforeChild(descObj)\n    }, outerDeco)\n\n    let dom = spec && spec.dom, contentDOM = spec && spec.contentDOM\n    if (node.isText) {\n      if (!dom) dom = document.createTextNode(node.text)\n      else if (dom.nodeType != 3) throw new RangeError(\"Text must be rendered as a DOM text node\")\n    } else if (!dom) {\n      ;({dom, contentDOM} = DOMSerializer.renderSpec(document, node.type.spec.toDOM(node)))\n    }\n    if (!contentDOM && !node.isText && dom.nodeName != \"BR\") { // Chrome gets confused by <br contenteditable=false>\n      if (!dom.hasAttribute(\"contenteditable\")) dom.contentEditable = false\n      if (node.type.spec.draggable) dom.draggable = true\n    }\n\n    let nodeDOM = dom\n    dom = applyOuterDeco(dom, outerDeco, node)\n\n    if (spec)\n      return descObj = new CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM,\n                                              spec, view, pos + 1)\n    else if (node.isText)\n      return new TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM, view)\n    else\n      return new NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos + 1)\n  }\n\n  parseRule() {\n    // Experimental kludge to allow opt-in re-parsing of nodes\n    if (this.node.type.spec.reparseInView) return null\n    // FIXME the assumption that this can always return the current\n    // attrs means that if the user somehow manages to change the\n    // attrs in the dom, that won't be picked up. Not entirely sure\n    // whether this is a problem\n    let rule = {node: this.node.type.name, attrs: this.node.attrs}\n    if (this.node.type.spec.code) rule.preserveWhitespace = \"full\"\n    if (this.contentDOM && !this.contentLost) rule.contentElement = this.contentDOM\n    else rule.getContent = () => this.contentDOM ? Fragment.empty : this.node.content\n    return rule\n  }\n\n  matchesNode(node, outerDeco, innerDeco) {\n    return this.dirty == NOT_DIRTY && node.eq(this.node) &&\n      sameOuterDeco(outerDeco, this.outerDeco) && innerDeco.eq(this.innerDeco)\n  }\n\n  get size() { return this.node.nodeSize }\n\n  get border() { return this.node.isLeaf ? 0 : 1 }\n\n  // Syncs `this.children` to match `this.node.content` and the local\n  // decorations, possibly introducing nesting for marks. Then, in a\n  // separate step, syncs the DOM inside `this.contentDOM` to\n  // `this.children`.\n  updateChildren(view, pos) {\n    let inline = this.node.inlineContent, off = pos\n    let composition = inline && view.composing && this.localCompositionNode(view, pos)\n    let updater = new ViewTreeUpdater(this, composition && composition.node)\n    iterDeco(this.node, this.innerDeco, (widget, i, insideNode) => {\n      if (widget.spec.marks)\n        updater.syncToMarks(widget.spec.marks, inline, view)\n      else if (widget.type.side >= 0 && !insideNode)\n        updater.syncToMarks(i == this.node.childCount ? Mark.none : this.node.child(i).marks, inline, view)\n      // If the next node is a desc matching this widget, reuse it,\n      // otherwise insert the widget as a new view desc.\n      updater.placeWidget(widget, view, off)\n    }, (child, outerDeco, innerDeco, i) => {\n      // Make sure the wrapping mark descs match the node's marks.\n      updater.syncToMarks(child.marks, inline, view)\n      // Either find an existing desc that exactly matches this node,\n      // and drop the descs before it.\n      updater.findNodeMatch(child, outerDeco, innerDeco, i) ||\n        // Or try updating the next desc to reflect this node.\n        updater.updateNextNode(child, outerDeco, innerDeco, view, i) ||\n        // Or just add it as a new desc.\n        updater.addNode(child, outerDeco, innerDeco, view, off)\n      off += child.nodeSize\n    })\n    // Drop all remaining descs after the current position.\n    updater.syncToMarks(nothing, inline, view)\n    if (this.node.isTextblock) updater.addTextblockHacks()\n    updater.destroyRest()\n\n    // Sync the DOM if anything changed\n    if (updater.changed || this.dirty == CONTENT_DIRTY) {\n      // May have to protect focused DOM from being changed if a composition is active\n      if (composition) this.protectLocalComposition(view, composition)\n      renderDescs(this.contentDOM, this.children, view)\n      if (browser.ios) iosHacks(this.dom)\n    }\n  }\n\n  localCompositionNode(view, pos) {\n    // Only do something if both the selection and a focused text node\n    // are inside of this node, and the node isn't already part of a\n    // view that's a child of this view\n    let {from, to} = view.state.selection\n    if (!(view.state.selection instanceof TextSelection) || from < pos || to > pos + this.node.content.size) return\n    let sel = view.root.getSelection()\n    let textNode = nearbyTextNode(sel.focusNode, sel.focusOffset)\n    if (!textNode || !this.dom.contains(textNode.parentNode)) return\n\n    // Find the text in the focused node in the node, stop if it's not\n    // there (may have been modified through other means, in which\n    // case it should overwritten)\n    let text = textNode.nodeValue\n    let textPos = findTextInFragment(this.node.content, text, from - pos, to - pos)\n\n    return textPos < 0 ? null : {node: textNode, pos: textPos, text}\n  }\n\n  protectLocalComposition(view, {node, pos, text}) {\n    // The node is already part of a local view desc, leave it there\n    if (this.getDesc(node)) return\n\n    // Create a composition view for the orphaned nodes\n    let topNode = node\n    for (;; topNode = topNode.parentNode) {\n      if (topNode.parentNode == this.contentDOM) break\n      while (topNode.previousSibling) topNode.parentNode.removeChild(topNode.previousSibling)\n      while (topNode.nextSibling) topNode.parentNode.removeChild(topNode.nextSibling)\n      if (topNode.pmViewDesc) topNode.pmViewDesc = null\n    }\n    let desc = new CompositionViewDesc(this, topNode, node, text)\n    view.compositionNodes.push(desc)\n\n    // Patch up this.children to contain the composition view\n    this.children = replaceNodes(this.children, pos, pos + text.length, view, desc)\n  }\n\n  // : (Node, [Decoration], DecorationSet, EditorView) → bool\n  // If this desc be updated to match the given node decoration,\n  // do so and return true.\n  update(node, outerDeco, innerDeco, view) {\n    if (this.dirty == NODE_DIRTY ||\n        !node.sameMarkup(this.node)) return false\n    this.updateInner(node, outerDeco, innerDeco, view)\n    return true\n  }\n\n  updateInner(node, outerDeco, innerDeco, view) {\n    this.updateOuterDeco(outerDeco)\n    this.node = node\n    this.innerDeco = innerDeco\n    if (this.contentDOM) this.updateChildren(view, this.posAtStart)\n    this.dirty = NOT_DIRTY\n  }\n\n  updateOuterDeco(outerDeco) {\n    if (sameOuterDeco(outerDeco, this.outerDeco)) return\n    let needsWrap = this.nodeDOM.nodeType != 1\n    let oldDOM = this.dom\n    this.dom = patchOuterDeco(this.dom, this.nodeDOM,\n                              computeOuterDeco(this.outerDeco, this.node, needsWrap),\n                              computeOuterDeco(outerDeco, this.node, needsWrap))\n    if (this.dom != oldDOM) {\n      oldDOM.pmViewDesc = null\n      this.dom.pmViewDesc = this\n    }\n    this.outerDeco = outerDeco\n  }\n\n  // Mark this node as being the selected node.\n  selectNode() {\n    this.nodeDOM.classList.add(\"ProseMirror-selectednode\")\n    if (this.contentDOM || !this.node.type.spec.draggable) this.dom.draggable = true\n  }\n\n  // Remove selected node marking from this node.\n  deselectNode() {\n    this.nodeDOM.classList.remove(\"ProseMirror-selectednode\")\n    if (this.contentDOM || !this.node.type.spec.draggable) this.dom.removeAttribute(\"draggable\")\n  }\n}\n\n// Create a view desc for the top-level document node, to be exported\n// and used by the view class.\nexport function docViewDesc(doc, outerDeco, innerDeco, dom, view) {\n  applyOuterDeco(dom, outerDeco, doc)\n  return new NodeViewDesc(null, doc, outerDeco, innerDeco, dom, dom, dom, view, 0)\n}\n\nclass TextViewDesc extends NodeViewDesc {\n  constructor(parent, node, outerDeco, innerDeco, dom, nodeDOM, view) {\n    super(parent, node, outerDeco, innerDeco, dom, null, nodeDOM, view)\n  }\n\n  parseRule() {\n    let skip = this.nodeDOM.parentNode\n    while (skip && skip != this.dom && !skip.pmIsDeco) skip = skip.parentNode\n    return {skip: skip || true}\n  }\n\n  update(node, outerDeco, _, view) {\n    if (this.dirty == NODE_DIRTY || (this.dirty != NOT_DIRTY && !this.inParent()) ||\n        !node.sameMarkup(this.node)) return false\n    this.updateOuterDeco(outerDeco)\n    if ((this.dirty != NOT_DIRTY || node.text != this.node.text) && node.text != this.nodeDOM.nodeValue) {\n      this.nodeDOM.nodeValue = node.text\n      if (view.trackWrites == this.nodeDOM) view.trackWrites = null\n    }\n    this.node = node\n    this.dirty = NOT_DIRTY\n    return true\n  }\n\n  inParent() {\n    let parentDOM = this.parent.contentDOM\n    for (let n = this.nodeDOM; n; n = n.parentNode) if (n == parentDOM) return true\n    return false\n  }\n\n  domFromPos(pos) {\n    return {node: this.nodeDOM, offset: pos}\n  }\n\n  localPosFromDOM(dom, offset, bias) {\n    if (dom == this.nodeDOM) return this.posAtStart + Math.min(offset, this.node.text.length)\n    return super.localPosFromDOM(dom, offset, bias)\n  }\n\n  ignoreMutation(mutation) {\n    return mutation.type != \"characterData\" && mutation.type != \"selection\"\n  }\n\n  slice(from, to, view) {\n    let node = this.node.cut(from, to), dom = document.createTextNode(node.text)\n    return new TextViewDesc(this.parent, node, this.outerDeco, this.innerDeco, dom, dom, view)\n  }\n}\n\n// A dummy desc used to tag trailing BR or span nodes created to work\n// around contentEditable terribleness.\nclass BRHackViewDesc extends ViewDesc {\n  parseRule() { return {ignore: true} }\n  matchesHack() { return this.dirty == NOT_DIRTY }\n}\n\n// A separate subclass is used for customized node views, so that the\n// extra checks only have to be made for nodes that are actually\n// customized.\nclass CustomNodeViewDesc extends NodeViewDesc {\n  // : (?ViewDesc, Node, [Decoration], DecorationSet, dom.Node, ?dom.Node, NodeView, EditorView)\n  constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec, view, pos) {\n    super(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos)\n    this.spec = spec\n  }\n\n  // A custom `update` method gets to decide whether the update goes\n  // through. If it does, and there's a `contentDOM` node, our logic\n  // updates the children.\n  update(node, outerDeco, innerDeco, view) {\n    if (this.dirty == NODE_DIRTY) return false\n    if (this.spec.update) {\n      let result = this.spec.update(node, outerDeco)\n      if (result) this.updateInner(node, outerDeco, innerDeco, view)\n      return result\n    } else if (!this.contentDOM && !node.isLeaf) {\n      return false\n    } else {\n      return super.update(node, outerDeco, innerDeco, view)\n    }\n  }\n\n  selectNode() {\n    this.spec.selectNode ? this.spec.selectNode() : super.selectNode()\n  }\n\n  deselectNode() {\n    this.spec.deselectNode ? this.spec.deselectNode() : super.deselectNode()\n  }\n\n  setSelection(anchor, head, root, force) {\n    this.spec.setSelection ? this.spec.setSelection(anchor, head, root)\n      : super.setSelection(anchor, head, root, force)\n  }\n\n  destroy() {\n    if (this.spec.destroy) this.spec.destroy()\n    super.destroy()\n  }\n\n  stopEvent(event) {\n    return this.spec.stopEvent ? this.spec.stopEvent(event) : false\n  }\n\n  ignoreMutation(mutation) {\n    return this.spec.ignoreMutation ? this.spec.ignoreMutation(mutation) : super.ignoreMutation(mutation)\n  }\n}\n\n// : (dom.Node, [ViewDesc])\n// Sync the content of the given DOM node with the nodes associated\n// with the given array of view descs, recursing into mark descs\n// because this should sync the subtree for a whole node at a time.\nfunction renderDescs(parentDOM, descs, view) {\n  let dom = parentDOM.firstChild, written = false\n  for (let i = 0; i < descs.length; i++) {\n    let desc = descs[i], childDOM = desc.dom\n    if (childDOM.parentNode == parentDOM) {\n      while (childDOM != dom) { dom = rm(dom); written = true }\n      dom = dom.nextSibling\n    } else {\n      written = true\n      parentDOM.insertBefore(childDOM, dom)\n    }\n    if (desc instanceof MarkViewDesc) {\n      let pos = dom ? dom.previousSibling : parentDOM.lastChild\n      renderDescs(desc.contentDOM, desc.children, view)\n      dom = pos ? pos.nextSibling : parentDOM.firstChild\n    }\n  }\n  while (dom) { dom = rm(dom); written = true }\n  if (written && view.trackWrites == parentDOM) view.trackWrites = null\n}\n\nfunction OuterDecoLevel(nodeName) {\n  if (nodeName) this.nodeName = nodeName\n}\nOuterDecoLevel.prototype = Object.create(null)\n\nconst noDeco = [new OuterDecoLevel]\n\nfunction computeOuterDeco(outerDeco, node, needsWrap) {\n  if (outerDeco.length == 0) return noDeco\n\n  let top = needsWrap ? noDeco[0] : new OuterDecoLevel, result = [top]\n\n  for (let i = 0; i < outerDeco.length; i++) {\n    let attrs = outerDeco[i].type.attrs, cur = top\n    if (!attrs) continue\n    if (attrs.nodeName)\n      result.push(cur = new OuterDecoLevel(attrs.nodeName))\n\n    for (let name in attrs) {\n      let val = attrs[name]\n      if (val == null) continue\n      if (needsWrap && result.length == 1)\n        result.push(cur = top = new OuterDecoLevel(node.isInline ? \"span\" : \"div\"))\n      if (name == \"class\") cur.class = (cur.class ? cur.class + \" \" : \"\") + val\n      else if (name == \"style\") cur.style = (cur.style ? cur.style + \";\" : \"\") + val\n      else if (name != \"nodeName\") cur[name] = val\n    }\n  }\n\n  return result\n}\n\nfunction patchOuterDeco(outerDOM, nodeDOM, prevComputed, curComputed) {\n  // Shortcut for trivial case\n  if (prevComputed == noDeco && curComputed == noDeco) return nodeDOM\n\n  let curDOM = nodeDOM\n  for (let i = 0; i < curComputed.length; i++) {\n    let deco = curComputed[i], prev = prevComputed[i]\n    if (i) {\n      let parent\n      if (prev && prev.nodeName == deco.nodeName && curDOM != outerDOM &&\n          (parent = curDOM.parentNode) && parent.tagName.toLowerCase() == deco.nodeName) {\n        curDOM = parent\n      } else {\n        parent = document.createElement(deco.nodeName)\n        parent.pmIsDeco = true\n        parent.appendChild(curDOM)\n        prev = noDeco[0]\n        curDOM = parent\n      }\n    }\n    patchAttributes(curDOM, prev || noDeco[0], deco)\n  }\n  return curDOM\n}\n\nfunction patchAttributes(dom, prev, cur) {\n  for (let name in prev)\n    if (name != \"class\" && name != \"style\" && name != \"nodeName\" && !(name in cur))\n      dom.removeAttribute(name)\n  for (let name in cur)\n    if (name != \"class\" && name != \"style\" && name != \"nodeName\" && cur[name] != prev[name])\n      dom.setAttribute(name, cur[name])\n  if (prev.class != cur.class) {\n    let prevList = prev.class ? prev.class.split(\" \") : nothing\n    let curList = cur.class ? cur.class.split(\" \") : nothing\n    for (let i = 0; i < prevList.length; i++) if (curList.indexOf(prevList[i]) == -1)\n      dom.classList.remove(prevList[i])\n    for (let i = 0; i < curList.length; i++) if (prevList.indexOf(curList[i]) == -1)\n      dom.classList.add(curList[i])\n  }\n  if (prev.style != cur.style) {\n    if (prev.style) {\n      let prop = /\\s*([\\w\\-\\xa1-\\uffff]+)\\s*:(?:\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|\\(.*?\\)|[^;])*/g, m\n      while (m = prop.exec(prev.style))\n        dom.style.removeProperty(m[1])\n    }\n    if (cur.style)\n      dom.style.cssText += cur.style\n  }\n}\n\nfunction applyOuterDeco(dom, deco, node) {\n  return patchOuterDeco(dom, dom, noDeco, computeOuterDeco(deco, node, dom.nodeType != 1))\n}\n\n// : ([Decoration], [Decoration]) → bool\nfunction sameOuterDeco(a, b) {\n  if (a.length != b.length) return false\n  for (let i = 0; i < a.length; i++) if (!a[i].type.eq(b[i].type)) return false\n  return true\n}\n\n// Remove a DOM node and return its next sibling.\nfunction rm(dom) {\n  let next = dom.nextSibling\n  dom.parentNode.removeChild(dom)\n  return next\n}\n\n// Helper class for incrementally updating a tree of mark descs and\n// the widget and node descs inside of them.\nclass ViewTreeUpdater {\n  // : (NodeViewDesc)\n  constructor(top, lockedNode) {\n    this.top = top\n    this.lock = lockedNode\n    // Index into `this.top`'s child array, represents the current\n    // update position.\n    this.index = 0\n    // When entering a mark, the current top and index are pushed\n    // onto this.\n    this.stack = []\n    // Tracks whether anything was changed\n    this.changed = false\n\n    let pre = preMatch(top.node.content, top.children)\n    this.preMatched = pre.nodes\n    this.preMatchOffset = pre.offset\n  }\n\n  getPreMatch(index) {\n    return index >= this.preMatchOffset ? this.preMatched[index - this.preMatchOffset] : null\n  }\n\n  // Destroy and remove the children between the given indices in\n  // `this.top`.\n  destroyBetween(start, end) {\n    if (start == end) return\n    for (let i = start; i < end; i++) this.top.children[i].destroy()\n    this.top.children.splice(start, end - start)\n    this.changed = true\n  }\n\n  // Destroy all remaining children in `this.top`.\n  destroyRest() {\n    this.destroyBetween(this.index, this.top.children.length)\n  }\n\n  // : ([Mark], EditorView)\n  // Sync the current stack of mark descs with the given array of\n  // marks, reusing existing mark descs when possible.\n  syncToMarks(marks, inline, view) {\n    let keep = 0, depth = this.stack.length >> 1\n    let maxKeep = Math.min(depth, marks.length)\n    while (keep < maxKeep &&\n           (keep == depth - 1 ? this.top : this.stack[(keep + 1) << 1]).matchesMark(marks[keep]) && marks[keep].type.spec.spanning !== false)\n      keep++\n\n    while (keep < depth) {\n      this.destroyRest()\n      this.top.dirty = NOT_DIRTY\n      this.index = this.stack.pop()\n      this.top = this.stack.pop()\n      depth--\n    }\n    while (depth < marks.length) {\n      this.stack.push(this.top, this.index + 1)\n      let found = -1\n      for (let i = this.index; i < Math.min(this.index + 3, this.top.children.length); i++) {\n        if (this.top.children[i].matchesMark(marks[depth])) { found = i; break }\n      }\n      if (found > -1) {\n        if (found > this.index) {\n          this.changed = true\n          this.destroyBetween(this.index, found)\n        }\n        this.top = this.top.children[this.index]\n      } else {\n        let markDesc = MarkViewDesc.create(this.top, marks[depth], inline, view)\n        this.top.children.splice(this.index, 0, markDesc)\n        this.top = markDesc\n        this.changed = true\n      }\n      this.index = 0\n      depth++\n    }\n  }\n\n  // : (Node, [Decoration], DecorationSet) → bool\n  // Try to find a node desc matching the given data. Skip over it and\n  // return true when successful.\n  findNodeMatch(node, outerDeco, innerDeco, index) {\n    let found = -1, preMatch = index < 0 ? undefined : this.getPreMatch(index), children = this.top.children\n    if (preMatch && preMatch.matchesNode(node, outerDeco, innerDeco)) {\n      found = children.indexOf(preMatch)\n    } else {\n      for (let i = this.index, e = Math.min(children.length, i + 5); i < e; i++) {\n        let child = children[i]\n        if (child.matchesNode(node, outerDeco, innerDeco) && this.preMatched.indexOf(child) < 0) {\n          found = i\n          break\n        }\n      }\n    }\n    if (found < 0) return false\n    this.destroyBetween(this.index, found)\n    this.index++\n    return true\n  }\n\n  // : (Node, [Decoration], DecorationSet, EditorView, Fragment, number) → bool\n  // Try to update the next node, if any, to the given data. Checks\n  // pre-matches to avoid overwriting nodes that could still be used.\n  updateNextNode(node, outerDeco, innerDeco, view, index) {\n    for (let i = this.index; i < this.top.children.length; i++) {\n      let next = this.top.children[i]\n      if (next instanceof NodeViewDesc) {\n        let preMatch = this.preMatched.indexOf(next)\n        if (preMatch > -1 && preMatch + this.preMatchOffset != index) return false\n        let nextDOM = next.dom\n\n        // Can't update if nextDOM is or contains this.lock, except if\n        // it's a text node whose content already matches the new text\n        // and whose decorations match the new ones.\n        let locked = this.lock && (nextDOM == this.lock || nextDOM.nodeType == 1 && nextDOM.contains(this.lock.parentNode)) &&\n            !(node.isText && next.node && next.node.isText && next.nodeDOM.nodeValue == node.text &&\n              next.dirty != NODE_DIRTY && sameOuterDeco(outerDeco, next.outerDeco))\n        if (!locked && next.update(node, outerDeco, innerDeco, view)) {\n          this.destroyBetween(this.index, i)\n          if (next.dom != nextDOM) this.changed = true\n          this.index++\n          return true\n        }\n        break\n      }\n    }\n    return false\n  }\n\n  // : (Node, [Decoration], DecorationSet, EditorView)\n  // Insert the node as a newly created node desc.\n  addNode(node, outerDeco, innerDeco, view, pos) {\n    this.top.children.splice(this.index++, 0, NodeViewDesc.create(this.top, node, outerDeco, innerDeco, view, pos))\n    this.changed = true\n  }\n\n  placeWidget(widget, view, pos) {\n    let next = this.index < this.top.children.length ? this.top.children[this.index] : null\n    if (next && next.matchesWidget(widget) && (widget == next.widget || !next.widget.type.toDOM.parentNode)) {\n      this.index++\n    } else {\n      let desc = new WidgetViewDesc(this.top, widget, view, pos)\n      this.top.children.splice(this.index++, 0, desc)\n      this.changed = true\n    }\n  }\n\n  // Make sure a textblock looks and behaves correctly in\n  // contentEditable.\n  addTextblockHacks() {\n    let lastChild = this.top.children[this.index - 1]\n    while (lastChild instanceof MarkViewDesc) lastChild = lastChild.children[lastChild.children.length - 1]\n\n    if (!lastChild || // Empty textblock\n        !(lastChild instanceof TextViewDesc) ||\n        /\\n$/.test(lastChild.node.text)) {\n      if (this.index < this.top.children.length && this.top.children[this.index].matchesHack()) {\n        this.index++\n      } else {\n        let dom = document.createElement(\"br\")\n        this.top.children.splice(this.index++, 0, new BRHackViewDesc(this.top, nothing, dom, null))\n        this.changed = true\n      }\n    }\n  }\n}\n\n// : (Fragment, [ViewDesc]) → [ViewDesc]\n// Iterate from the end of the fragment and array of descs to find\n// directly matching ones, in order to avoid overeagerly reusing\n// those for other nodes. Returns an array whose positions correspond\n// to node positions in the fragment, and whose elements are either\n// descs matched to the child at that index, or empty.\nfunction preMatch(frag, descs) {\n  let result = [], end = frag.childCount\n  for (let i = descs.length - 1; end > 0 && i >= 0; i--) {\n    let desc = descs[i], node = desc.node\n    if (!node) continue\n    if (node != frag.child(end - 1)) break\n    result.push(desc)\n    --end\n  }\n  return {nodes: result.reverse(), offset: end}\n}\n\nfunction compareSide(a, b) { return a.type.side - b.type.side }\n\n// : (ViewDesc, DecorationSet, (Decoration, number), (Node, [Decoration], DecorationSet, number))\n// This function abstracts iterating over the nodes and decorations in\n// a fragment. Calls `onNode` for each node, with its local and child\n// decorations. Splits text nodes when there is a decoration starting\n// or ending inside of them. Calls `onWidget` for each widget.\nfunction iterDeco(parent, deco, onWidget, onNode) {\n  let locals = deco.locals(parent), offset = 0\n  // Simple, cheap variant for when there are no local decorations\n  if (locals.length == 0) {\n    for (let i = 0; i < parent.childCount; i++) {\n      let child = parent.child(i)\n      onNode(child, locals, deco.forChild(offset, child), i)\n      offset += child.nodeSize\n    }\n    return\n  }\n\n  let decoIndex = 0, active = [], restNode = null\n  for (let parentIndex = 0;;) {\n    if (decoIndex < locals.length && locals[decoIndex].to == offset) {\n      let widget = locals[decoIndex++], widgets\n      while (decoIndex < locals.length && locals[decoIndex].to == offset)\n        (widgets || (widgets = [widget])).push(locals[decoIndex++])\n      if (widgets) {\n        widgets.sort(compareSide)\n        for (let i = 0; i < widgets.length; i++) onWidget(widgets[i], parentIndex, !!restNode)\n      } else {\n        onWidget(widget, parentIndex, !!restNode)\n      }\n    }\n\n    let child, index\n    if (restNode) {\n      index = -1\n      child = restNode\n      restNode = null\n    } else if (parentIndex < parent.childCount) {\n      index = parentIndex\n      child = parent.child(parentIndex++)\n    } else {\n      break\n    }\n\n    for (let i = 0; i < active.length; i++) if (active[i].to <= offset) active.splice(i--, 1)\n    while (decoIndex < locals.length && locals[decoIndex].from <= offset && locals[decoIndex].to > offset) active.push(locals[decoIndex++])\n\n    let end = offset + child.nodeSize\n    if (child.isText) {\n      let cutAt = end\n      if (decoIndex < locals.length && locals[decoIndex].from < cutAt) cutAt = locals[decoIndex].from\n      for (let i = 0; i < active.length; i++) if (active[i].to < cutAt) cutAt = active[i].to\n      if (cutAt < end) {\n        restNode = child.cut(cutAt - offset)\n        child = child.cut(0, cutAt - offset)\n        end = cutAt\n        index = -1\n      }\n    }\n\n    onNode(child, active.length ? active.slice() : nothing, deco.forChild(offset, child), index)\n    offset = end\n  }\n}\n\n// List markers in Mobile Safari will mysteriously disappear\n// sometimes. This works around that.\nfunction iosHacks(dom) {\n  if (dom.nodeName == \"UL\" || dom.nodeName == \"OL\") {\n    let oldCSS = dom.style.cssText\n    dom.style.cssText = oldCSS + \"; list-style: square !important\"\n    window.getComputedStyle(dom).listStyle\n    dom.style.cssText = oldCSS\n  }\n}\n\nfunction nearbyTextNode(node, offset) {\n  for (;;) {\n    if (node.nodeType == 3) return node\n    if (node.nodeType == 1 && offset > 0) {\n      if (node.childNodes.length > offset && node.childNodes[offset].nodeType == 3)\n        return node.childNodes[offset]\n      node = node.childNodes[offset - 1]\n      offset = nodeSize(node)\n    } else if (node.nodeType == 1 && offset < node.childNodes.length) {\n      node = node.childNodes[offset]\n      offset = 0\n    } else {\n      return null\n    }\n  }\n}\n\n// Find a piece of text in an inline fragment, overlapping from-to\nfunction findTextInFragment(frag, text, from, to) {\n  for (let i = 0, pos = 0; i < frag.childCount && pos <= to;) {\n    let child = frag.child(i++), childStart = pos\n    pos += child.nodeSize\n    if (!child.isText) continue\n    let str = child.text\n    while (i < frag.childCount) {\n      let next = frag.child(i++)\n      pos += next.nodeSize\n      if (!next.isText) break\n      str += next.text\n    }\n    if (pos >= from) {\n      let found = str.lastIndexOf(text, to - childStart)\n      if (found >= 0 && found + text.length + childStart >= from)\n        return childStart + found\n    }\n  }\n  return -1\n}\n\n// Replace range from-to in an array of view descs with replacement\n// (may be null to just delete). This goes very much against the grain\n// of the rest of this code, which tends to create nodes with the\n// right shape in one go, rather than messing with them after\n// creation, but is necessary in the composition hack.\nfunction replaceNodes(nodes, from, to, view, replacement) {\n  let result = []\n  for (let i = 0, off = 0; i < nodes.length; i++) {\n    let child = nodes[i], start = off, end = off += child.size\n    if (start >= to || end <= from) {\n      result.push(child)\n    } else {\n      if (start < from) result.push(child.slice(0, from - start, view))\n      if (replacement) {\n        result.push(replacement)\n        replacement = null\n      }\n      if (end > to) result.push(child.slice(to - start, child.size, view))\n    }\n  }\n  return result\n}\n","import {Selection, NodeSelection, TextSelection} from \"prosemirror-state\"\nimport browser from \"./browser\"\nimport {domIndex, selectionCollapsed} from \"./dom\"\n\nfunction moveSelectionBlock(state, dir) {\n  let {$anchor, $head} = state.selection\n  let $side = dir > 0 ? $anchor.max($head) : $anchor.min($head)\n  let $start = !$side.parent.inlineContent ? $side : $side.depth ? state.doc.resolve(dir > 0 ? $side.after() : $side.before()) : null\n  return $start && Selection.findFrom($start, dir)\n}\n\nfunction apply(view, sel) {\n  view.dispatch(view.state.tr.setSelection(sel).scrollIntoView())\n  return true\n}\n\nfunction selectHorizontally(view, dir, mods) {\n  let sel = view.state.selection\n  if (sel instanceof TextSelection) {\n    if (!sel.empty || mods.indexOf(\"s\") > -1) {\n      return false\n    } else if (view.endOfTextblock(dir > 0 ? \"right\" : \"left\")) {\n      let next = moveSelectionBlock(view.state, dir)\n      if (next && (next instanceof NodeSelection)) return apply(view, next)\n      return false\n    } else if (!(browser.mac && mods.indexOf(\"m\") > -1)) {\n      let $head = sel.$head, node = $head.textOffset ? null : dir < 0 ? $head.nodeBefore : $head.nodeAfter, desc\n      if (!node || node.isText) return false\n      let nodePos = dir < 0 ? $head.pos - node.nodeSize : $head.pos\n      if (!(node.isAtom || (desc = view.docView.descAt(nodePos)) && !desc.contentDOM)) return false\n      if (NodeSelection.isSelectable(node)) {\n        return apply(view, new NodeSelection(dir < 0 ? view.state.doc.resolve($head.pos - node.nodeSize) : $head))\n      } else if (browser.webkit) {\n        // Chrome and Safari will introduce extra pointless cursor\n        // positions around inline uneditable nodes, so we have to\n        // take over and move the cursor past them (#937)\n        return apply(view, new TextSelection(view.state.doc.resolve(dir < 0 ? nodePos : nodePos + node.nodeSize)))\n      } else {\n        return false\n      }\n    }\n  } else if (sel instanceof NodeSelection && sel.node.isInline) {\n    return apply(view, new TextSelection(dir > 0 ? sel.$to : sel.$from))\n  } else {\n    let next = moveSelectionBlock(view.state, dir)\n    if (next) return apply(view, next)\n    return false\n  }\n}\n\nfunction nodeLen(node) {\n  return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length\n}\n\nfunction isIgnorable(dom) {\n  let desc = dom.pmViewDesc\n  return desc && desc.size == 0 && (dom.nextSibling || dom.nodeName != \"BR\")\n}\n\n// Make sure the cursor isn't directly after one or more ignored\n// nodes, which will confuse the browser's cursor motion logic.\nfunction skipIgnoredNodesLeft(view) {\n  let sel = view.root.getSelection()\n  let node = sel.focusNode, offset = sel.focusOffset\n  if (!node) return\n  let moveNode, moveOffset, force = false\n  // Gecko will do odd things when the selection is directly in front\n  // of a non-editable node, so in that case, move it into the next\n  // node if possible. Issue prosemirror/prosemirror#832.\n  if (browser.gecko && node.nodeType == 1 && offset < nodeLen(node) && isIgnorable(node.childNodes[offset])) force = true\n  for (;;) {\n    if (offset > 0) {\n      if (node.nodeType != 1) {\n        break\n      } else {\n        let before = node.childNodes[offset - 1]\n        if (isIgnorable(before)) {\n          moveNode = node\n          moveOffset = --offset\n        } else if (before.nodeType == 3) {\n          node = before\n          offset = node.nodeValue.length\n        } else break\n      }\n    } else if (isBlockNode(node)) {\n      break\n    } else {\n      let prev = node.previousSibling\n      while (prev && isIgnorable(prev)) {\n        moveNode = node.parentNode\n        moveOffset = domIndex(prev)\n        prev = prev.previousSibling\n      }\n      if (!prev) {\n        node = node.parentNode\n        if (node == view.dom) break\n        offset = 0\n      } else {\n        node = prev\n        offset = nodeLen(node)\n      }\n    }\n  }\n  if (force) setSelFocus(view, sel, node, offset)\n  else if (moveNode) setSelFocus(view, sel, moveNode, moveOffset)\n}\n\n// Make sure the cursor isn't directly before one or more ignored\n// nodes.\nfunction skipIgnoredNodesRight(view) {\n  let sel = view.root.getSelection()\n  let node = sel.focusNode, offset = sel.focusOffset\n  if (!node) return\n  let len = nodeLen(node)\n  let moveNode, moveOffset\n  for (;;) {\n    if (offset < len) {\n      if (node.nodeType != 1) break\n      let after = node.childNodes[offset]\n      if (isIgnorable(after)) {\n        moveNode = node\n        moveOffset = ++offset\n      }\n      else break\n    } else if (isBlockNode(node)) {\n      break\n    } else {\n      let next = node.nextSibling\n      while (next && isIgnorable(next)) {\n        moveNode = next.parentNode\n        moveOffset = domIndex(next) + 1\n        next = next.nextSibling\n      }\n      if (!next) {\n        node = node.parentNode\n        if (node == view.dom) break\n        offset = len = 0\n      } else {\n        node = next\n        offset = 0\n        len = nodeLen(node)\n      }\n    }\n  }\n  if (moveNode) setSelFocus(view, sel, moveNode, moveOffset)\n}\n\nfunction isBlockNode(dom) {\n  let desc = dom.pmViewDesc\n  return desc && desc.node && desc.node.isBlock\n}\n\nfunction setSelFocus(view, sel, node, offset) {\n  if (selectionCollapsed(sel)) {\n    let range = document.createRange()\n    range.setEnd(node, offset)\n    range.setStart(node, offset)\n    sel.removeAllRanges()\n    sel.addRange(range)\n  } else if (sel.extend) {\n    sel.extend(node, offset)\n  }\n  view.domObserver.setCurSelection()\n}\n\n// : (EditorState, number)\n// Check whether vertical selection motion would involve node\n// selections. If so, apply it (if not, the result is left to the\n// browser)\nfunction selectVertically(view, dir, mods) {\n  let sel = view.state.selection\n  if (sel instanceof TextSelection && !sel.empty || mods.indexOf(\"s\") > -1) return false\n  if (browser.mac && mods.indexOf(\"m\") > -1) return false\n  let {$from, $to} = sel\n\n  if (!$from.parent.inlineContent || view.endOfTextblock(dir < 0 ? \"up\" : \"down\")) {\n    let next = moveSelectionBlock(view.state, dir)\n    if (next && (next instanceof NodeSelection))\n      return apply(view, next)\n  }\n  if (!$from.parent.inlineContent) {\n    let beyond = Selection.findFrom(dir < 0 ? $from : $to, dir)\n    return beyond ? apply(view, beyond) : true\n  }\n  return false\n}\n\nfunction stopNativeHorizontalDelete(view, dir) {\n  if (!(view.state.selection instanceof TextSelection)) return true\n  let {$head, $anchor, empty} = view.state.selection\n  if (!$head.sameParent($anchor)) return true\n  if (!empty) return false\n  if (view.endOfTextblock(dir > 0 ? \"forward\" : \"backward\")) return true\n  let nextNode = !$head.textOffset && (dir < 0 ? $head.nodeBefore : $head.nodeAfter)\n  if (nextNode && !nextNode.isText) {\n    let tr = view.state.tr\n    if (dir < 0) tr.delete($head.pos - nextNode.nodeSize, $head.pos)\n    else tr.delete($head.pos, $head.pos + nextNode.nodeSize)\n    view.dispatch(tr)\n    return true\n  }\n  return false\n}\n\nfunction switchEditable(view, node, state) {\n  view.domObserver.stop()\n  node.contentEditable = state\n  view.domObserver.start()\n}\n\n// Issue #867 / https://bugs.chromium.org/p/chromium/issues/detail?id=903821\n// In which Chrome does really wrong things when the down arrow is\n// pressed when the cursor is directly at the start of a textblock and\n// has an uneditable node after it\nfunction chromeDownArrowBug(view) {\n  if (!browser.chrome || view.state.selection.$head.parentOffset > 0) return\n  let {focusNode, focusOffset} = view.root.getSelection()\n  if (focusNode && focusNode.nodeType == 1 && focusOffset == 0 &&\n      focusNode.firstChild && focusNode.firstChild.contentEditable == \"false\") {\n    let child = focusNode.firstChild\n    switchEditable(view, child, true)\n    setTimeout(() => switchEditable(view, child, false), 20)\n  }\n}\n\n// A backdrop key mapping used to make sure we always suppress keys\n// that have a dangerous default effect, even if the commands they are\n// bound to return false, and to make sure that cursor-motion keys\n// find a cursor (as opposed to a node selection) when pressed. For\n// cursor-motion keys, the code in the handlers also takes care of\n// block selections.\n\nfunction getMods(event) {\n  let result = \"\"\n  if (event.ctrlKey) result += \"c\"\n  if (event.metaKey) result += \"m\"\n  if (event.altKey) result += \"a\"\n  if (event.shiftKey) result += \"s\"\n  return result\n}\n\nexport function captureKeyDown(view, event) {\n  let code = event.keyCode, mods = getMods(event)\n  if (code == 8 || (browser.mac && code == 72 && mods == \"c\")) { // Backspace, Ctrl-h on Mac\n    return stopNativeHorizontalDelete(view, -1) || skipIgnoredNodesLeft(view)\n  } else if (code == 46 || (browser.mac && code == 68 && mods == \"c\")) { // Delete, Ctrl-d on Mac\n    return stopNativeHorizontalDelete(view, 1) || skipIgnoredNodesRight(view)\n  } else if (code == 13 || code == 27) { // Enter, Esc\n    return true\n  } else if (code == 37) { // Left arrow\n    return selectHorizontally(view, -1, mods) || skipIgnoredNodesLeft(view)\n  } else if (code == 39) { // Right arrow\n    return selectHorizontally(view, 1, mods) || skipIgnoredNodesRight(view)\n  } else if (code == 38) { // Up arrow\n    return selectVertically(view, -1, mods) || skipIgnoredNodesLeft(view)\n  } else if (code == 40) { // Down arrow\n    return chromeDownArrowBug(view) || selectVertically(view, 1, mods) || skipIgnoredNodesRight(view)\n  } else if (mods == (browser.mac ? \"m\" : \"c\") &&\n             (code == 66 || code == 73 || code == 89 || code == 90)) { // Mod-[biyz]\n    return true\n  }\n  return false\n}\n","import {Fragment, DOMParser} from \"prosemirror-model\"\nimport {Selection, TextSelection} from \"prosemirror-state\"\n\nimport {selectionBetween, selectionFromDOM, selectionToDOM} from \"./selection\"\nimport {selectionCollapsed, keyEvent} from \"./dom\"\nimport browser from \"./browser\"\n\n// Note that all referencing and parsing is done with the\n// start-of-operation selection and document, since that's the one\n// that the DOM represents. If any changes came in in the meantime,\n// the modification is mapped over those before it is applied, in\n// readDOMChange.\n\nfunction parseBetween(view, from_, to_) {\n  let {node: parent, fromOffset, toOffset, from, to} = view.docView.parseRange(from_, to_)\n\n  let domSel = view.root.getSelection(), find = null, anchor = domSel.anchorNode\n  if (anchor && view.dom.contains(anchor.nodeType == 1 ? anchor : anchor.parentNode)) {\n    find = [{node: anchor, offset: domSel.anchorOffset}]\n    if (!selectionCollapsed(domSel))\n      find.push({node: domSel.focusNode, offset: domSel.focusOffset})\n  }\n  // Work around issue in Chrome where backspacing sometimes replaces\n  // the deleted content with a random BR node (issues #799, #831)\n  if (browser.chrome && view.lastKeyCode === 8) {\n    for (let off = toOffset; off > fromOffset; off--) {\n      let node = parent.childNodes[off - 1], desc = node.pmViewDesc\n      if (node.nodeType == \"BR\" && !desc) { toOffset = off; break }\n      if (!desc || desc.size) break\n    }\n  }\n  let startDoc = view.state.doc\n  let parser = view.someProp(\"domParser\") || DOMParser.fromSchema(view.state.schema)\n  let $from = startDoc.resolve(from)\n\n  let sel = null, doc = parser.parse(parent, {\n    topNode: $from.parent,\n    topMatch: $from.parent.contentMatchAt($from.index()),\n    topOpen: true,\n    from: fromOffset,\n    to: toOffset,\n    preserveWhitespace: $from.parent.type.spec.code ? \"full\" : true,\n    editableContent: true,\n    findPositions: find,\n    ruleFromNode,\n    context: $from\n  })\n  if (find && find[0].pos != null) {\n    let anchor = find[0].pos, head = find[1] && find[1].pos\n    if (head == null) head = anchor\n    sel = {anchor: anchor + from, head: head + from}\n  }\n  return {doc, sel, from, to}\n}\n\nfunction ruleFromNode(dom) {\n  let desc = dom.pmViewDesc\n  if (desc) {\n    return desc.parseRule()\n  } else if (dom.nodeName == \"BR\" && dom.parentNode) {\n    // Safari replaces the list item or table cell with a BR\n    // directly in the list node (?!) if you delete the last\n    // character in a list item or table cell (#708, #862)\n    if (browser.safari && /^(ul|ol)$/i.test(dom.parentNode.nodeName)) {\n      let skip = document.createElement(\"div\")\n      skip.appendChild(document.createElement(\"li\"))\n      return {skip}\n    } else if (dom.parentNode.lastChild == dom || browser.safari && /^(tr|table)$/i.test(dom.parentNode.nodeName)) {\n      return {ignore: true}\n    }\n  } else if (dom.nodeName == \"IMG\" && dom.getAttribute(\"mark-placeholder\")) {\n    return {ignore: true}\n  }\n}\n\nexport function readDOMChange(view, from, to, typeOver, addedNodes) {\n  if (from < 0) {\n    let origin = view.lastSelectionTime > Date.now() - 50 ? view.lastSelectionOrigin : null\n    let newSel = selectionFromDOM(view, origin)\n    if (newSel && !view.state.selection.eq(newSel)) {\n      let tr = view.state.tr.setSelection(newSel)\n      if (origin == \"pointer\") tr.setMeta(\"pointer\", true)\n      else if (origin == \"key\") tr.scrollIntoView()\n      view.dispatch(tr)\n    }\n    return\n  }\n\n  let $before = view.state.doc.resolve(from)\n  let shared = $before.sharedDepth(to)\n  from = $before.before(shared + 1)\n  to = view.state.doc.resolve(to).after(shared + 1)\n\n  let sel = view.state.selection\n  let parse = parseBetween(view, from, to)\n\n  let doc = view.state.doc, compare = doc.slice(parse.from, parse.to)\n  let preferredPos, preferredSide\n  // Prefer anchoring to end when Backspace is pressed\n  if (view.lastKeyCode === 8 && Date.now() - 100 < view.lastKeyCodeTime) {\n    preferredPos = view.state.selection.to\n    preferredSide = \"end\"\n  } else {\n    preferredPos = view.state.selection.from\n    preferredSide = \"start\"\n  }\n  view.lastKeyCode = null\n\n  let change = findDiff(compare.content, parse.doc.content, parse.from, preferredPos, preferredSide)\n  if (!change) {\n    if (typeOver && sel instanceof TextSelection && !sel.empty && sel.$head.sameParent(sel.$anchor) &&\n        !view.composing && !(parse.sel && parse.sel.anchor != parse.sel.head)) {\n      change = {start: sel.from, endA: sel.to, endB: sel.to}\n    } else {\n      if (parse.sel) {\n        let sel = resolveSelection(view, view.state.doc, parse.sel)\n        if (sel && !sel.eq(view.state.selection)) view.dispatch(view.state.tr.setSelection(sel))\n      }\n      return\n    }\n  }\n  view.domChangeCount++\n  // Handle the case where overwriting a selection by typing matches\n  // the start or end of the selected content, creating a change\n  // that's smaller than what was actually overwritten.\n  if (view.state.selection.from < view.state.selection.to &&\n      change.start == change.endB &&\n      view.state.selection instanceof TextSelection) {\n    if (change.start > view.state.selection.from && change.start <= view.state.selection.from + 2) {\n      change.start = view.state.selection.from\n    } else if (change.endA < view.state.selection.to && change.endA >= view.state.selection.to - 2) {\n      change.endB += (view.state.selection.to - change.endA)\n      change.endA = view.state.selection.to\n    }\n  }\n\n  // IE11 will insert a non-breaking space _ahead_ of the space after\n  // the cursor space when adding a space before another space. When\n  // that happened, adjust the change to cover the space instead.\n  if (browser.ie && browser.ie_version <= 11 && change.endB == change.start + 1 &&\n      change.endA == change.start && change.start > parse.from &&\n      parse.doc.textBetween(change.start - parse.from - 1, change.start - parse.from + 1) == \" \\u00a0\") {\n    change.start--\n    change.endA--\n    change.endB--\n  }\n\n  let $from = parse.doc.resolveNoCache(change.start - parse.from)\n  let $to = parse.doc.resolveNoCache(change.endB - parse.from)\n  let inlineChange = $from.sameParent($to) && $from.parent.inlineContent\n  let nextSel\n  // If this looks like the effect of pressing Enter (or was recorded\n  // as being an iOS enter press), just dispatch an Enter key instead.\n  if (((browser.ios && view.lastIOSEnter > Date.now() - 225 &&\n        (!inlineChange || addedNodes.some(n => n.nodeName == \"DIV\" || n.nodeName == \"P\"))) ||\n       (!inlineChange && $from.pos < parse.doc.content.size &&\n        (nextSel = Selection.findFrom(parse.doc.resolve($from.pos + 1), 1, true)) &&\n        nextSel.head == $to.pos)) &&\n      view.someProp(\"handleKeyDown\", f => f(view, keyEvent(13, \"Enter\")))) {\n    view.lastIOSEnter = 0\n    return\n  }\n  // Same for backspace\n  if (view.state.selection.anchor > change.start &&\n      looksLikeJoin(doc, change.start, change.endA, $from, $to) &&\n      view.someProp(\"handleKeyDown\", f => f(view, keyEvent(8, \"Backspace\")))) {\n    if (browser.android && browser.chrome) view.domObserver.suppressSelectionUpdates() // #820\n    return\n  }\n\n  // This tries to detect Android virtual keyboard\n  // enter-and-pick-suggestion action. That sometimes (see issue\n  // #1059) first fires a DOM mutation, before moving the selection to\n  // the newly created block. And then, because ProseMirror cleans up\n  // the DOM selection, it gives up moving the selection entirely,\n  // leaving the cursor in the wrong place. When that happens, we drop\n  // the new paragraph from the initial change, and fire a simulated\n  // enter key afterwards.\n  if (browser.android && !inlineChange && $from.start() != $to.start() && $to.parentOffset == 0 && $from.depth == $to.depth &&\n      parse.sel && parse.sel.anchor == parse.sel.head && parse.sel.head == change.endA) {\n    change.endB -= 2\n    $to = parse.doc.resolveNoCache(change.endB - parse.from)\n    setTimeout(() => {\n      view.someProp(\"handleKeyDown\", function (f) { return f(view, keyEvent(13, \"Enter\")); })\n    }, 20)\n  }\n\n  let chFrom = change.start, chTo = change.endA\n\n  let tr, storedMarks, markChange, $from1\n  if (inlineChange) {\n    if ($from.pos == $to.pos) { // Deletion\n      // IE11 sometimes weirdly moves the DOM selection around after\n      // backspacing out the first element in a textblock\n      if (browser.ie && browser.ie_version <= 11 && $from.parentOffset == 0) {\n        view.domObserver.suppressSelectionUpdates()\n        setTimeout(() => selectionToDOM(view), 20)\n      }\n      tr = view.state.tr.delete(chFrom, chTo)\n      storedMarks = doc.resolve(change.start).marksAcross(doc.resolve(change.endA))\n    } else if ( // Adding or removing a mark\n      change.endA == change.endB && ($from1 = doc.resolve(change.start)) &&\n      (markChange = isMarkChange($from.parent.content.cut($from.parentOffset, $to.parentOffset),\n                                 $from1.parent.content.cut($from1.parentOffset, change.endA - $from1.start())))\n    ) {\n      tr = view.state.tr\n      if (markChange.type == \"add\") tr.addMark(chFrom, chTo, markChange.mark)\n      else tr.removeMark(chFrom, chTo, markChange.mark)\n    } else if ($from.parent.child($from.index()).isText && $from.index() == $to.index() - ($to.textOffset ? 0 : 1)) {\n      // Both positions in the same text node -- simply insert text\n      let text = $from.parent.textBetween($from.parentOffset, $to.parentOffset)\n      if (view.someProp(\"handleTextInput\", f => f(view, chFrom, chTo, text))) return\n      tr = view.state.tr.insertText(text, chFrom, chTo)\n    }\n  }\n\n  if (!tr)\n    tr = view.state.tr.replace(chFrom, chTo, parse.doc.slice(change.start - parse.from, change.endB - parse.from))\n  if (parse.sel) {\n    let sel = resolveSelection(view, tr.doc, parse.sel)\n    // Chrome Android will sometimes, during composition, report the\n    // selection in the wrong place. If it looks like that is\n    // happening, don't update the selection.\n    // Edge just doesn't move the cursor forward when you start typing\n    // in an empty block or between br nodes.\n    if (sel && !(browser.chrome && browser.android && view.composing && sel.empty &&\n                   (sel.head == chFrom || sel.head == tr.mapping.map(chTo) - 1) ||\n                 browser.ie && sel.empty && sel.head == chFrom))\n      tr.setSelection(sel)\n  }\n  if (storedMarks) tr.ensureMarks(storedMarks)\n  view.dispatch(tr.scrollIntoView())\n}\n\nfunction resolveSelection(view, doc, parsedSel) {\n  if (Math.max(parsedSel.anchor, parsedSel.head) > doc.content.size) return null\n  return selectionBetween(view, doc.resolve(parsedSel.anchor), doc.resolve(parsedSel.head))\n}\n\n// : (Fragment, Fragment) → ?{mark: Mark, type: string}\n// Given two same-length, non-empty fragments of inline content,\n// determine whether the first could be created from the second by\n// removing or adding a single mark type.\nfunction isMarkChange(cur, prev) {\n  let curMarks = cur.firstChild.marks, prevMarks = prev.firstChild.marks\n  let added = curMarks, removed = prevMarks, type, mark, update\n  for (let i = 0; i < prevMarks.length; i++) added = prevMarks[i].removeFromSet(added)\n  for (let i = 0; i < curMarks.length; i++) removed = curMarks[i].removeFromSet(removed)\n  if (added.length == 1 && removed.length == 0) {\n    mark = added[0]\n    type = \"add\"\n    update = node => node.mark(mark.addToSet(node.marks))\n  } else if (added.length == 0 && removed.length == 1) {\n    mark = removed[0]\n    type = \"remove\"\n    update = node => node.mark(mark.removeFromSet(node.marks))\n  } else {\n    return null\n  }\n  let updated = []\n  for (let i = 0; i < prev.childCount; i++) updated.push(update(prev.child(i)))\n  if (Fragment.from(updated).eq(cur)) return {mark, type}\n}\n\nfunction looksLikeJoin(old, start, end, $newStart, $newEnd) {\n  if (!$newStart.parent.isTextblock ||\n      // The content must have shrunk\n      end - start <= $newEnd.pos - $newStart.pos ||\n      // newEnd must point directly at or after the end of the block that newStart points into\n      skipClosingAndOpening($newStart, true, false) < $newEnd.pos)\n    return false\n\n  let $start = old.resolve(start)\n  // Start must be at the end of a block\n  if ($start.parentOffset < $start.parent.content.size || !$start.parent.isTextblock)\n    return false\n  let $next = old.resolve(skipClosingAndOpening($start, true, true))\n  // The next textblock must start before end and end near it\n  if (!$next.parent.isTextblock || $next.pos > end ||\n      skipClosingAndOpening($next, true, false) < end)\n    return false\n\n  // The fragments after the join point must match\n  return $newStart.parent.content.cut($newStart.parentOffset).eq($next.parent.content)\n}\n\nfunction skipClosingAndOpening($pos, fromEnd, mayOpen) {\n  let depth = $pos.depth, end = fromEnd ? $pos.end() : $pos.pos\n  while (depth > 0 && (fromEnd || $pos.indexAfter(depth) == $pos.node(depth).childCount)) {\n    depth--\n    end++\n    fromEnd = false\n  }\n  if (mayOpen) {\n    let next = $pos.node(depth).maybeChild($pos.indexAfter(depth))\n    while (next && !next.isLeaf) {\n      next = next.firstChild\n      end++\n    }\n  }\n  return end\n}\n\nfunction findDiff(a, b, pos, preferredPos, preferredSide) {\n  let start = a.findDiffStart(b, pos)\n  if (start == null) return null\n  let {a: endA, b: endB} = a.findDiffEnd(b, pos + a.size, pos + b.size)\n  if (preferredSide == \"end\") {\n    let adjust = Math.max(0, start - Math.min(endA, endB))\n    preferredPos -= endA + adjust - start\n  }\n  if (endA < start && a.size < b.size) {\n    let move = preferredPos <= start && preferredPos >= endA ? start - preferredPos : 0\n    start -= move\n    endB = start + (endB - endA)\n    endA = start\n  } else if (endB < start) {\n    let move = preferredPos <= start && preferredPos >= endB ? start - preferredPos : 0\n    start -= move\n    endA = start + (endA - endB)\n    endB = start\n  }\n  return {start, endA, endB}\n}\n","import {Slice, Fragment, DOMParser, DOMSerializer} from \"prosemirror-model\"\n\nexport function serializeForClipboard(view, slice) {\n  let context = [], {content, openStart, openEnd} = slice\n  while (openStart > 1 && openEnd > 1 && content.childCount == 1 && content.firstChild.childCount == 1) {\n    openStart--\n    openEnd--\n    let node = content.firstChild\n    context.push(node.type.name, node.type.hasRequiredAttrs() ? node.attrs : null)\n    content = node.content\n  }\n\n  let serializer = view.someProp(\"clipboardSerializer\") || DOMSerializer.fromSchema(view.state.schema)\n  let doc = detachedDoc(), wrap = doc.createElement(\"div\")\n  wrap.appendChild(serializer.serializeFragment(content, {document: doc}))\n\n  let firstChild = wrap.firstChild, needsWrap\n  while (firstChild && firstChild.nodeType == 1 && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) {\n    for (let i = needsWrap.length - 1; i >= 0; i--) {\n      let wrapper = doc.createElement(needsWrap[i])\n      while (wrap.firstChild) wrapper.appendChild(wrap.firstChild)\n      wrap.appendChild(wrapper)\n    }\n    firstChild = wrap.firstChild\n  }\n\n  if (firstChild && firstChild.nodeType == 1)\n    firstChild.setAttribute(\"data-pm-slice\", `${openStart} ${openEnd} ${JSON.stringify(context)}`)\n\n  let text = view.someProp(\"clipboardTextSerializer\", f => f(slice)) ||\n      slice.content.textBetween(0, slice.content.size, \"\\n\\n\")\n\n  return {dom: wrap, text}\n}\n\n// : (EditorView, string, string, ?bool, ResolvedPos) → ?Slice\n// Read a slice of content from the clipboard (or drop data).\nexport function parseFromClipboard(view, text, html, plainText, $context) {\n  let dom, inCode = $context.parent.type.spec.code, slice\n  if (!html && !text) return null\n  let asText = text && (plainText || inCode || !html)\n  if (asText) {\n    view.someProp(\"transformPastedText\", f => { text = f(text, inCode || plainText) })\n    if (inCode) return new Slice(Fragment.from(view.state.schema.text(text)), 0, 0)\n    let parsed = view.someProp(\"clipboardTextParser\", f => f(text, $context, plainText))\n    if (parsed) {\n      slice = parsed\n    } else {\n      dom = document.createElement(\"div\")\n      text.trim().split(/(?:\\r\\n?|\\n)+/).forEach(block => {\n        dom.appendChild(document.createElement(\"p\")).textContent = block\n      })\n    }\n  } else {\n    view.someProp(\"transformPastedHTML\", f => { html = f(html) })\n    dom = readHTML(html)\n  }\n\n  let contextNode = dom && dom.querySelector(\"[data-pm-slice]\")\n  let sliceData = contextNode && /^(\\d+) (\\d+) (.*)/.exec(contextNode.getAttribute(\"data-pm-slice\"))\n  if (!slice) {\n    let parser = view.someProp(\"clipboardParser\") || view.someProp(\"domParser\") || DOMParser.fromSchema(view.state.schema)\n    slice = parser.parseSlice(dom, {preserveWhitespace: !!(asText || sliceData), context: $context})\n  }\n  if (sliceData)\n    slice = addContext(closeSlice(slice, +sliceData[1], +sliceData[2]), sliceData[3])\n  else // HTML wasn't created by ProseMirror. Make sure top-level siblings are coherent\n    slice = Slice.maxOpen(normalizeSiblings(slice.content, $context), false)\n\n  view.someProp(\"transformPasted\", f => { slice = f(slice) })\n  return slice\n}\n\n// Takes a slice parsed with parseSlice, which means there hasn't been\n// any content-expression checking done on the top nodes, tries to\n// find a parent node in the current context that might fit the nodes,\n// and if successful, rebuilds the slice so that it fits into that parent.\n//\n// This addresses the problem that Transform.replace expects a\n// coherent slice, and will fail to place a set of siblings that don't\n// fit anywhere in the schema.\nfunction normalizeSiblings(fragment, $context) {\n  if (fragment.childCount < 2) return fragment\n  for (let d = $context.depth; d >= 0; d--) {\n    let parent = $context.node(d)\n    let match = parent.contentMatchAt($context.index(d))\n    let lastWrap, result = []\n    fragment.forEach(node => {\n      if (!result) return\n      let wrap = match.findWrapping(node.type), inLast\n      if (!wrap) return result = null\n      if (inLast = result.length && lastWrap.length && addToSibling(wrap, lastWrap, node, result[result.length - 1], 0)) {\n        result[result.length - 1] = inLast\n      } else {\n        if (result.length) result[result.length - 1] = closeRight(result[result.length - 1], lastWrap.length)\n        let wrapped = withWrappers(node, wrap)\n        result.push(wrapped)\n        match = match.matchType(wrapped.type, wrapped.attrs)\n        lastWrap = wrap\n      }\n    })\n    if (result) return Fragment.from(result)\n  }\n  return fragment\n}\n\nfunction withWrappers(node, wrap, from = 0) {\n  for (let i = wrap.length - 1; i >= from; i--)\n    node = wrap[i].create(null, Fragment.from(node))\n  return node\n}\n\n// Used to group adjacent nodes wrapped in similar parents by\n// normalizeSiblings into the same parent node\nfunction addToSibling(wrap, lastWrap, node, sibling, depth) {\n  if (depth < wrap.length && depth < lastWrap.length && wrap[depth] == lastWrap[depth]) {\n    let inner = addToSibling(wrap, lastWrap, node, sibling.lastChild, depth + 1)\n    if (inner) return sibling.copy(sibling.content.replaceChild(sibling.childCount - 1, inner))\n    let match = sibling.contentMatchAt(sibling.childCount)\n    if (match.matchType(depth == wrap.length - 1 ? node.type : wrap[depth + 1]))\n      return sibling.copy(sibling.content.append(Fragment.from(withWrappers(node, wrap, depth + 1))))\n  }\n}\n\nfunction closeRight(node, depth) {\n  if (depth == 0) return node\n  let fragment = node.content.replaceChild(node.childCount - 1, closeRight(node.lastChild, depth - 1))\n  let fill = node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true)\n  return node.copy(fragment.append(fill))\n}\n\nfunction closeRange(fragment, side, from, to, depth, openEnd) {\n  let node = side < 0 ? fragment.firstChild : fragment.lastChild, inner = node.content\n  if (depth < to - 1) inner = closeRange(inner, side, from, to, depth + 1, openEnd)\n  if (depth >= from)\n    inner = side < 0 ? node.contentMatchAt(0).fillBefore(inner, fragment.childCount > 1 || openEnd <= depth).append(inner)\n      : inner.append(node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true))\n  return fragment.replaceChild(side < 0 ? 0 : fragment.childCount - 1, node.copy(inner))\n}\n\nfunction closeSlice(slice, openStart, openEnd) {\n  if (openStart < slice.openStart)\n    slice = new Slice(closeRange(slice.content, -1, openStart, slice.openStart, 0, slice.openEnd), openStart, slice.openEnd)\n  if (openEnd < slice.openEnd)\n    slice = new Slice(closeRange(slice.content, 1, openEnd, slice.openEnd, 0, 0), slice.openStart, openEnd)\n  return slice\n}\n\n// Trick from jQuery -- some elements must be wrapped in other\n// elements for innerHTML to work. I.e. if you do `div.innerHTML =\n// \"<td>..</td>\"` the table cells are ignored.\nconst wrapMap = {\n  thead: [\"table\"],\n  tbody: [\"table\"],\n  tfoot: [\"table\"],\n  caption: [\"table\"],\n  colgroup: [\"table\"],\n  col: [\"table\", \"colgroup\"],\n  tr: [\"table\", \"tbody\"],\n  td: [\"table\", \"tbody\", \"tr\"],\n  th: [\"table\", \"tbody\", \"tr\"]\n}\n\nlet _detachedDoc = null\nfunction detachedDoc() {\n  return _detachedDoc || (_detachedDoc = document.implementation.createHTMLDocument(\"title\"))\n}\n\nfunction readHTML(html) {\n  let metas = /(\\s*<meta [^>]*>)*/.exec(html)\n  if (metas) html = html.slice(metas[0].length)\n  let elt = detachedDoc().createElement(\"div\")\n  let firstTag = /(?:<meta [^>]*>)*<([a-z][^>\\s]+)/i.exec(html), wrap, depth = 0\n  if (wrap = firstTag && wrapMap[firstTag[1].toLowerCase()]) {\n    html = wrap.map(n => \"<\" + n + \">\").join(\"\") + html + wrap.map(n => \"</\" + n + \">\").reverse().join(\"\")\n    depth = wrap.length\n  }\n  elt.innerHTML = html\n  for (let i = 0; i < depth; i++) elt = elt.firstChild\n  return elt\n}\n\nfunction addContext(slice, context) {\n  if (!slice.size) return slice\n  let schema = slice.content.firstChild.type.schema, array\n  try { array = JSON.parse(context) }\n  catch(e) { return slice }\n  let {content, openStart, openEnd} = slice\n  for (let i = array.length - 2; i >= 0; i -= 2) {\n    let type = schema.nodes[array[i]]\n    if (!type || type.hasRequiredAttrs()) break\n    content = Fragment.from(type.create(array[i + 1], content))\n    openStart++; openEnd++\n  }\n  return new Slice(content, openStart, openEnd)\n}\n","import browser from \"./browser\"\nimport {domIndex, isEquivalentPosition} from \"./dom\"\nimport {hasFocusAndSelection, hasSelection, selectionToDOM} from \"./selection\"\n\nconst observeOptions = {\n  childList: true,\n  characterData: true,\n  characterDataOldValue: true,\n  attributes: true,\n  attributeOldValue: true,\n  subtree: true\n}\n// IE11 has very broken mutation observers, so we also listen to DOMCharacterDataModified\nconst useCharData = browser.ie && browser.ie_version <= 11\n\nclass SelectionState {\n  constructor() {\n    this.anchorNode = this.anchorOffset = this.focusNode = this.focusOffset = null\n  }\n\n  set(sel) {\n    this.anchorNode = sel.anchorNode; this.anchorOffset = sel.anchorOffset\n    this.focusNode = sel.focusNode; this.focusOffset = sel.focusOffset\n  }\n\n  eq(sel) {\n    return sel.anchorNode == this.anchorNode && sel.anchorOffset == this.anchorOffset &&\n      sel.focusNode == this.focusNode && sel.focusOffset == this.focusOffset\n  }\n}\n\nexport class DOMObserver {\n  constructor(view, handleDOMChange) {\n    this.view = view\n    this.handleDOMChange = handleDOMChange\n    this.queue = []\n    this.flushingSoon = -1\n    this.observer = window.MutationObserver &&\n      new window.MutationObserver(mutations => {\n        for (let i = 0; i < mutations.length; i++) this.queue.push(mutations[i])\n        // IE11 will sometimes (on backspacing out a single character\n        // text node after a BR node) call the observer callback\n        // before actually updating the DOM, which will cause\n        // ProseMirror to miss the change (see #930)\n        if (browser.ie && browser.ie_version <= 11 && mutations.some(\n          m => m.type == \"childList\" && m.removedNodes.length ||\n               m.type == \"characterData\" && m.oldValue.length > m.target.nodeValue.length))\n          this.flushSoon()\n        else\n          this.flush()\n      })\n    this.currentSelection = new SelectionState\n    if (useCharData) {\n      this.onCharData = e => {\n        this.queue.push({target: e.target, type: \"characterData\", oldValue: e.prevValue})\n        this.flushSoon()\n      }\n    }\n    this.onSelectionChange = this.onSelectionChange.bind(this)\n    this.suppressingSelectionUpdates = false\n  }\n\n  flushSoon() {\n    if (this.flushingSoon < 0)\n      this.flushingSoon = window.setTimeout(() => { this.flushingSoon = -1; this.flush() }, 20)\n  }\n\n  forceFlush() {\n    if (this.flushingSoon > -1) {\n      window.clearTimeout(this.flushingSoon)\n      this.flushingSoon = -1\n      this.flush()\n    }\n  }\n\n  start() {\n    if (this.observer)\n      this.observer.observe(this.view.dom, observeOptions)\n    if (useCharData)\n      this.view.dom.addEventListener(\"DOMCharacterDataModified\", this.onCharData)\n    this.connectSelection()\n  }\n\n  stop() {\n    if (this.observer) {\n      let take = this.observer.takeRecords()\n      if (take.length) {\n        for (let i = 0; i < take.length; i++) this.queue.push(take[i])\n        window.setTimeout(() => this.flush(), 20)\n      }\n      this.observer.disconnect()\n    }\n    if (useCharData) this.view.dom.removeEventListener(\"DOMCharacterDataModified\", this.onCharData)\n    this.disconnectSelection()\n  }\n\n  connectSelection() {\n    this.view.dom.ownerDocument.addEventListener(\"selectionchange\", this.onSelectionChange)\n  }\n\n  disconnectSelection() {\n    this.view.dom.ownerDocument.removeEventListener(\"selectionchange\", this.onSelectionChange)\n  }\n\n  suppressSelectionUpdates() {\n    this.suppressingSelectionUpdates = true\n    setTimeout(() => this.suppressingSelectionUpdates = false, 50)\n  }\n\n  onSelectionChange() {\n    if (!hasFocusAndSelection(this.view)) return\n    if (this.suppressingSelectionUpdates) return selectionToDOM(this.view)\n    // Deletions on IE11 fire their events in the wrong order, giving\n    // us a selection change event before the DOM changes are\n    // reported.\n    if (browser.ie && browser.ie_version <= 11 && !this.view.state.selection.empty) {\n      let sel = this.view.root.getSelection()\n      // Selection.isCollapsed isn't reliable on IE\n      if (sel.focusNode && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset))\n        return this.flushSoon()\n    }\n    this.flush()\n  }\n\n  setCurSelection() {\n    this.currentSelection.set(this.view.root.getSelection())\n  }\n\n  ignoreSelectionChange(sel) {\n    if (sel.rangeCount == 0) return true\n    let container = sel.getRangeAt(0).commonAncestorContainer\n    let desc = this.view.docView.nearestDesc(container)\n    if (desc && desc.ignoreMutation({type: \"selection\", target: container.nodeType == 3 ? container.parentNode : container})) {\n      this.setCurSelection()\n      return true\n    }\n  }\n\n  flush() {\n    if (!this.view.docView || this.flushingSoon > -1) return\n    let mutations = this.observer ? this.observer.takeRecords() : []\n    if (this.queue.length) {\n      mutations = this.queue.concat(mutations)\n      this.queue.length = 0\n    }\n\n    let sel = this.view.root.getSelection()\n    let newSel = !this.suppressingSelectionUpdates && !this.currentSelection.eq(sel) && hasSelection(this.view) && !this.ignoreSelectionChange(sel)\n\n    let from = -1, to = -1, typeOver = false, added = []\n    if (this.view.editable) {\n      for (let i = 0; i < mutations.length; i++) {\n        let result = this.registerMutation(mutations[i], added)\n        if (result) {\n          from = from < 0 ? result.from : Math.min(result.from, from)\n          to = to < 0 ? result.to : Math.max(result.to, to)\n          if (result.typeOver) typeOver = true\n        }\n      }\n    }\n\n    if (browser.gecko && added.length > 1) {\n      let brs = added.filter(n => n.nodeName == \"BR\")\n      if (brs.length == 2) {\n        let [a, b] = brs\n        if (a.parentNode && a.parentNode.parentNode == b.parentNode) b.remove()\n        else a.remove()\n      }\n    }\n\n    if (from > -1 || newSel) {\n      if (from > -1) {\n        this.view.docView.markDirty(from, to)\n        checkCSS(this.view)\n      }\n      this.handleDOMChange(from, to, typeOver, added)\n      if (this.view.docView.dirty) this.view.updateState(this.view.state)\n      else if (!this.currentSelection.eq(sel)) selectionToDOM(this.view)\n    }\n  }\n\n  registerMutation(mut, added) {\n    // Ignore mutations inside nodes that were already noted as inserted\n    if (added.indexOf(mut.target) > -1) return null\n    let desc = this.view.docView.nearestDesc(mut.target)\n    if (mut.type == \"attributes\" &&\n        (desc == this.view.docView || mut.attributeName == \"contenteditable\" ||\n         // Firefox sometimes fires spurious events for null/empty styles\n         (mut.attributeName == \"style\" && !mut.oldValue && !mut.target.getAttribute(\"style\"))))\n      return null\n    if (!desc || desc.ignoreMutation(mut)) return null\n\n    if (mut.type == \"childList\") {\n      let prev = mut.previousSibling, next = mut.nextSibling\n      if (browser.ie && browser.ie_version <= 11 && mut.addedNodes.length) {\n        // IE11 gives us incorrect next/prev siblings for some\n        // insertions, so if there are added nodes, recompute those\n        for (let i = 0; i < mut.addedNodes.length; i++) {\n          let {previousSibling, nextSibling} = mut.addedNodes[i]\n          if (!previousSibling || Array.prototype.indexOf.call(mut.addedNodes, previousSibling) < 0) prev = previousSibling\n          if (!nextSibling || Array.prototype.indexOf.call(mut.addedNodes, nextSibling) < 0) next = nextSibling\n        }\n      }\n      let fromOffset = prev && prev.parentNode == mut.target\n          ? domIndex(prev) + 1 : 0\n      let from = desc.localPosFromDOM(mut.target, fromOffset, -1)\n      let toOffset = next && next.parentNode == mut.target\n          ? domIndex(next) : mut.target.childNodes.length\n      for (let i = 0; i < mut.addedNodes.length; i++) added.push(mut.addedNodes[i])\n      let to = desc.localPosFromDOM(mut.target, toOffset, 1)\n      return {from, to}\n    } else if (mut.type == \"attributes\") {\n      return {from: desc.posAtStart - desc.border, to: desc.posAtEnd + desc.border}\n    } else { // \"characterData\"\n      return {\n        from: desc.posAtStart,\n        to: desc.posAtEnd,\n        // An event was generated for a text change that didn't change\n        // any text. Mark the dom change to fall back to assuming the\n        // selection was typed over with an identical value if it can't\n        // find another change.\n        typeOver: mut.target.nodeValue == mut.oldValue\n      }\n    }\n  }\n}\n\nlet cssChecked = false\n\nfunction checkCSS(view) {\n  if (cssChecked) return\n  cssChecked = true\n  if (getComputedStyle(view.dom).whiteSpace == \"normal\")\n    console[\"warn\"](\"ProseMirror expects the CSS white-space property to be set, preferably to 'pre-wrap'. It is recommended to load style/prosemirror.css from the prosemirror-view package.\")\n}\n","// This file defines a number of helpers for wiring up user input to\n// table-related functionality.\n\nimport {Slice, Fragment} from \"prosemirror-model\"\nimport {Selection, TextSelection} from \"prosemirror-state\"\nimport {keydownHandler} from \"prosemirror-keymap\"\n\nimport {key, nextCell, cellAround, inSameTable,\n        isInTable, selectionCell} from \"./util\"\nimport {CellSelection} from \"./cellselection\"\nimport {TableMap} from \"./tablemap\"\nimport {pastedCells, fitSlice, clipCells, insertCells} from \"./copypaste\"\nimport {tableNodeTypes} from \"./schema\"\n\nexport const handleKeyDown = keydownHandler({\n  \"ArrowLeft\": arrow(\"horiz\", -1),\n  \"ArrowRight\": arrow(\"horiz\", 1),\n  \"ArrowUp\": arrow(\"vert\", -1),\n  \"ArrowDown\": arrow(\"vert\", 1),\n\n  \"Shift-ArrowLeft\": shiftArrow(\"horiz\", -1),\n  \"Shift-ArrowRight\": shiftArrow(\"horiz\", 1),\n  \"Shift-ArrowUp\": shiftArrow(\"vert\", -1),\n  \"Shift-ArrowDown\": shiftArrow(\"vert\", 1),\n\n  \"Backspace\": deleteCellSelection,\n  \"Mod-Backspace\": deleteCellSelection,\n  \"Delete\": deleteCellSelection,\n  \"Mod-Delete\": deleteCellSelection\n})\n\nfunction maybeSetSelection(state, dispatch, selection) {\n  if (selection.eq(state.selection)) return false\n  if (dispatch) dispatch(state.tr.setSelection(selection).scrollIntoView())\n  return true\n}\n\nfunction arrow(axis, dir) {\n  return (state, dispatch, view) => {\n    let sel = state.selection\n    if (sel instanceof CellSelection) {\n      return maybeSetSelection(state, dispatch, Selection.near(sel.$headCell, dir))\n    }\n    if (axis != \"horiz\" && !sel.empty) return false\n    let end = atEndOfCell(view, axis, dir)\n    if (end == null) return false\n    if (axis == \"horiz\") {\n      return maybeSetSelection(state, dispatch, Selection.near(state.doc.resolve(sel.head + dir), dir))\n    } else {\n      let $cell = state.doc.resolve(end), $next = nextCell($cell, axis, dir), newSel\n      if ($next) newSel = Selection.near($next, 1)\n      else if (dir < 0) newSel = Selection.near(state.doc.resolve($cell.before(-1)), -1)\n      else newSel = Selection.near(state.doc.resolve($cell.after(-1)), 1)\n      return maybeSetSelection(state, dispatch, newSel)\n    }\n  }\n}\n\nfunction shiftArrow(axis, dir) {\n  return (state, dispatch, view) => {\n    let sel = state.selection\n    if (!(sel instanceof CellSelection)) {\n      let end = atEndOfCell(view, axis, dir)\n      if (end == null) return false\n      sel = new CellSelection(state.doc.resolve(end))\n    }\n    let $head = nextCell(sel.$headCell, axis, dir)\n    if (!$head) return false\n    return maybeSetSelection(state, dispatch, new CellSelection(sel.$anchorCell, $head))\n  }\n}\n\nfunction deleteCellSelection(state, dispatch) {\n  let sel = state.selection\n  if (!(sel instanceof CellSelection)) return false\n  if (dispatch) {\n    let tr = state.tr, baseContent = tableNodeTypes(state.schema).cell.createAndFill().content\n    sel.forEachCell((cell, pos) => {\n      if (!cell.content.eq(baseContent))\n        tr.replace(tr.mapping.map(pos + 1), tr.mapping.map(pos + cell.nodeSize - 1),\n                   new Slice(baseContent, 0, 0))\n    })\n    if (tr.docChanged) dispatch(tr)\n  }\n  return true\n}\n\nexport function handleTripleClick(view, pos) {\n  let doc = view.state.doc, $cell = cellAround(doc.resolve(pos))\n  if (!$cell) return false\n  view.dispatch(view.state.tr.setSelection(new CellSelection($cell)))\n  return true\n}\n\nexport function handlePaste(view, _, slice) {\n  if (!isInTable(view.state)) return false\n  let cells = pastedCells(slice), sel = view.state.selection\n  if (sel instanceof CellSelection) {\n    if (!cells) cells = {width: 1, height: 1, rows: [Fragment.from(fitSlice(tableNodeTypes(view.state.schema).cell, slice))]}\n    let table = sel.$anchorCell.node(-1), start = sel.$anchorCell.start(-1)\n    let rect = TableMap.get(table).rectBetween(sel.$anchorCell.pos - start, sel.$headCell.pos - start)\n    cells = clipCells(cells, rect.right - rect.left, rect.bottom - rect.top)\n    insertCells(view.state, view.dispatch, start, rect, cells)\n    return true\n  } else if (cells) {\n    let $cell = selectionCell(view.state), start = $cell.start(-1)\n    insertCells(view.state, view.dispatch, start, TableMap.get($cell.node(-1)).findCell($cell.pos - start), cells)\n    return true\n  } else {\n    return false\n  }\n}\n\nexport function handleMouseDown(view, startEvent) {\n  if (startEvent.ctrlKey || startEvent.metaKey) return\n\n  let startDOMCell = domInCell(view, startEvent.target), $anchor\n  if (startEvent.shiftKey && (view.state.selection instanceof CellSelection)) {\n    // Adding to an existing cell selection\n    setCellSelection(view.state.selection.$anchorCell, startEvent)\n    startEvent.preventDefault()\n  } else if (startEvent.shiftKey && startDOMCell &&\n             ($anchor = cellAround(view.state.selection.$anchor)) != null &&\n             cellUnderMouse(view, startEvent).pos != $anchor.pos) {\n    // Adding to a selection that starts in another cell (causing a\n    // cell selection to be created).\n    setCellSelection($anchor, startEvent)\n    startEvent.preventDefault()\n  } else if (!startDOMCell) {\n    // Not in a cell, let the default behavior happen.\n    return\n  }\n\n  // Create and dispatch a cell selection between the given anchor and\n  // the position under the mouse.\n  function setCellSelection($anchor, event) {\n    let $head = cellUnderMouse(view, event)\n    let starting = key.getState(view.state) == null\n    if (!$head || !inSameTable($anchor, $head)) {\n      if (starting) $head = $anchor\n      else return\n    }\n    let selection = new CellSelection($anchor, $head)\n    if (starting || !view.state.selection.eq(selection)) {\n      let tr = view.state.tr.setSelection(selection)\n      if (starting) tr.setMeta(key, $anchor.pos)\n      view.dispatch(tr)\n    }\n  }\n\n  // Stop listening to mouse motion events.\n  function stop() {\n    view.root.removeEventListener(\"mouseup\", stop)\n    view.root.removeEventListener(\"dragstart\", stop)\n    view.root.removeEventListener(\"mousemove\", move)\n    if (key.getState(view.state) != null) view.dispatch(view.state.tr.setMeta(key, -1))\n  }\n\n  function move(event) {\n    let anchor = key.getState(view.state), $anchor\n    if (anchor != null) {\n      // Continuing an existing cross-cell selection\n      $anchor = view.state.doc.resolve(anchor)\n    } else if (domInCell(view, event.target) != startDOMCell) {\n      // Moving out of the initial cell -- start a new cell selection\n      $anchor = cellUnderMouse(view, startEvent)\n      if (!$anchor) return stop()\n    }\n    if ($anchor) setCellSelection($anchor, event)\n  }\n  view.root.addEventListener(\"mouseup\", stop)\n  view.root.addEventListener(\"dragstart\", stop)\n  view.root.addEventListener(\"mousemove\", move)\n}\n\n// Check whether the cursor is at the end of a cell (so that further\n// motion would move out of the cell)\nfunction atEndOfCell(view, axis, dir) {\n  if (!(view.state.selection instanceof TextSelection)) return null\n  let {$head} = view.state.selection\n  for (let d = $head.depth - 1; d >= 0; d--) {\n    let parent = $head.node(d), index = dir < 0 ? $head.index(d) : $head.indexAfter(d)\n    if (index != (dir < 0 ? 0 : parent.childCount)) return null\n    if (parent.type.spec.tableRole == \"cell\" || parent.type.spec.tableRole == \"header_cell\") {\n      let cellPos = $head.before(d)\n      let dirStr = axis == \"vert\" ? (dir > 0 ? \"down\" : \"up\") : (dir > 0 ? \"right\" : \"left\")\n      return view.endOfTextblock(dirStr) ? cellPos : null\n    }\n  }\n  return null\n}\n\nfunction domInCell(view, dom) {\n  for (; dom && dom != view.dom; dom = dom.parentNode)\n    if (dom.nodeName == \"TD\" || dom.nodeName == \"TH\") return dom\n}\n\nfunction cellUnderMouse(view, event) {\n  let mousePos = view.posAtCoords({left: event.clientX, top: event.clientY})\n  if (!mousePos) return null\n  return mousePos ? cellAround(view.state.doc.resolve(mousePos.pos)) : null\n}\n","function compareObjs(a, b) {\n  if (a == b) return true\n  for (let p in a) if (a[p] !== b[p]) return false\n  for (let p in b) if (!(p in a)) return false\n  return true\n}\n\nclass WidgetType {\n  constructor(toDOM, spec) {\n    this.spec = spec || noSpec\n    this.side = this.spec.side || 0\n    this.toDOM = toDOM\n  }\n\n  map(mapping, span, offset, oldOffset) {\n    let {pos, deleted} = mapping.mapResult(span.from + oldOffset, this.side < 0 ? -1 : 1)\n    return deleted ? null : new Decoration(pos - offset, pos - offset, this)\n  }\n\n  valid() { return true }\n\n  eq(other) {\n    return this == other ||\n      (other instanceof WidgetType &&\n       (this.spec.key && this.spec.key == other.spec.key ||\n        this.toDOM == other.toDOM && compareObjs(this.spec, other.spec)))\n  }\n}\n\nclass InlineType {\n  constructor(attrs, spec) {\n    this.spec = spec || noSpec\n    this.attrs = attrs\n  }\n\n  map(mapping, span, offset, oldOffset) {\n    let from = mapping.map(span.from + oldOffset, this.spec.inclusiveStart ? -1 : 1) - offset\n    let to = mapping.map(span.to + oldOffset, this.spec.inclusiveEnd ? 1 : -1) - offset\n    return from >= to ? null : new Decoration(from, to, this)\n  }\n\n  valid(_, span) { return span.from < span.to }\n\n  eq(other) {\n    return this == other ||\n      (other instanceof InlineType && compareObjs(this.attrs, other.attrs) &&\n       compareObjs(this.spec, other.spec))\n  }\n\n  static is(span) { return span.type instanceof InlineType }\n}\n\nclass NodeType {\n  constructor(attrs, spec) {\n    this.spec = spec || noSpec\n    this.attrs = attrs\n  }\n\n  map(mapping, span, offset, oldOffset) {\n    let from = mapping.mapResult(span.from + oldOffset, 1)\n    if (from.deleted) return null\n    let to = mapping.mapResult(span.to + oldOffset, -1)\n    if (to.deleted || to.pos <= from.pos) return null\n    return new Decoration(from.pos - offset, to.pos - offset, this)\n  }\n\n  valid(node, span) {\n    let {index, offset} = node.content.findIndex(span.from)\n    return offset == span.from && offset + node.child(index).nodeSize == span.to\n  }\n\n  eq(other) {\n    return this == other ||\n      (other instanceof NodeType && compareObjs(this.attrs, other.attrs) &&\n       compareObjs(this.spec, other.spec))\n  }\n}\n\n// ::- Decoration objects can be provided to the view through the\n// [`decorations` prop](#view.EditorProps.decorations). They come in\n// several variants—see the static members of this class for details.\nexport class Decoration {\n  constructor(from, to, type) {\n    // :: number\n    // The start position of the decoration.\n    this.from = from\n    // :: number\n    // The end position. Will be the same as `from` for [widget\n    // decorations](#view.Decoration^widget).\n    this.to = to\n    this.type = type\n  }\n\n  copy(from, to) {\n    return new Decoration(from, to, this.type)\n  }\n\n  eq(other, offset = 0) {\n    return this.type.eq(other.type) && this.from + offset == other.from && this.to + offset == other.to\n  }\n\n  map(mapping, offset, oldOffset) {\n    return this.type.map(mapping, this, offset, oldOffset)\n  }\n\n  // :: (number, union<(view: EditorView, getPos: () → number) → dom.Node, dom.Node>, ?Object) → Decoration\n  // Creates a widget decoration, which is a DOM node that's shown in\n  // the document at the given position. It is recommended that you\n  // delay rendering the widget by passing a function that will be\n  // called when the widget is actually drawn in a view, but you can\n  // also directly pass a DOM node. `getPos` can be used to find the\n  // widget's current document position.\n  //\n  //   spec::- These options are supported:\n  //\n  //     side:: ?number\n  //     Controls which side of the document position this widget is\n  //     associated with. When negative, it is drawn before a cursor\n  //     at its position, and content inserted at that position ends\n  //     up after the widget. When zero (the default) or positive, the\n  //     widget is drawn after the cursor and content inserted there\n  //     ends up before the widget.\n  //\n  //     When there are multiple widgets at a given position, their\n  //     `side` values determine the order in which they appear. Those\n  //     with lower values appear first. The ordering of widgets with\n  //     the same `side` value is unspecified.\n  //\n  //     When `marks` is null, `side` also determines the marks that\n  //     the widget is wrapped in—those of the node before when\n  //     negative, those of the node after when positive.\n  //\n  //     marks:: ?[Mark]\n  //     The precise set of marks to draw around the widget.\n  //\n  //     stopEvent:: ?(event: dom.Event) → bool\n  //     Can be used to control which DOM events, when they bubble out\n  //     of this widget, the editor view should ignore.\n  //\n  //     ignoreSelection:: ?bool\n  //     When set (defaults to false), selection changes inside the\n  //     widget are ignored, and don't cause ProseMirror to try and\n  //     re-sync the selection with its selection state.\n  //\n  //     key:: ?string\n  //     When comparing decorations of this type (in order to decide\n  //     whether it needs to be redrawn), ProseMirror will by default\n  //     compare the widget DOM node by identity. If you pass a key,\n  //     that key will be compared instead, which can be useful when\n  //     you generate decorations on the fly and don't want to store\n  //     and reuse DOM nodes. Make sure that any widgets with the same\n  //     key are interchangeable—if widgets differ in, for example,\n  //     the behavior of some event handler, they should get\n  //     different keys.\n  static widget(pos, toDOM, spec) {\n    return new Decoration(pos, pos, new WidgetType(toDOM, spec))\n  }\n\n  // :: (number, number, DecorationAttrs, ?Object) → Decoration\n  // Creates an inline decoration, which adds the given attributes to\n  // each inline node between `from` and `to`.\n  //\n  //   spec::- These options are recognized:\n  //\n  //     inclusiveStart:: ?bool\n  //     Determines how the left side of the decoration is\n  //     [mapped](#transform.Position_Mapping) when content is\n  //     inserted directly at that position. By default, the decoration\n  //     won't include the new content, but you can set this to `true`\n  //     to make it inclusive.\n  //\n  //     inclusiveEnd:: ?bool\n  //     Determines how the right side of the decoration is mapped.\n  //     See\n  //     [`inclusiveStart`](#view.Decoration^inline^spec.inclusiveStart).\n  static inline(from, to, attrs, spec) {\n    return new Decoration(from, to, new InlineType(attrs, spec))\n  }\n\n  // :: (number, number, DecorationAttrs, ?Object) → Decoration\n  // Creates a node decoration. `from` and `to` should point precisely\n  // before and after a node in the document. That node, and only that\n  // node, will receive the given attributes.\n  //\n  //   spec::-\n  //\n  //   Optional information to store with the decoration. It\n  //   is also used when comparing decorators for equality.\n  static node(from, to, attrs, spec) {\n    return new Decoration(from, to, new NodeType(attrs, spec))\n  }\n\n  // :: Object\n  // The spec provided when creating this decoration. Can be useful\n  // if you've stored extra information in that object.\n  get spec() { return this.type.spec }\n}\n\n// DecorationAttrs:: interface\n// A set of attributes to add to a decorated node. Most properties\n// simply directly correspond to DOM attributes of the same name,\n// which will be set to the property's value. These are exceptions:\n//\n//   class:: ?string\n//   A CSS class name or a space-separated set of class names to be\n//   _added_ to the classes that the node already had.\n//\n//   style:: ?string\n//   A string of CSS to be _added_ to the node's existing `style` property.\n//\n//   nodeName:: ?string\n//   When non-null, the target node is wrapped in a DOM element of\n//   this type (and the other attributes are applied to this element).\n\nconst none = [], noSpec = {}\n\n// ::- A collection of [decorations](#view.Decoration), organized in\n// such a way that the drawing algorithm can efficiently use and\n// compare them. This is a persistent data structure—it is not\n// modified, updates create a new value.\nexport class DecorationSet {\n  constructor(local, children) {\n    this.local = local && local.length ? local : none\n    this.children = children && children.length ? children : none\n  }\n\n  // :: (Node, [Decoration]) → DecorationSet\n  // Create a set of decorations, using the structure of the given\n  // document.\n  static create(doc, decorations) {\n    return decorations.length ? buildTree(decorations, doc, 0, noSpec) : empty\n  }\n\n  // :: (?number, ?number, ?(spec: Object) → bool) → [Decoration]\n  // Find all decorations in this set which touch the given range\n  // (including decorations that start or end directly at the\n  // boundaries) and match the given predicate on their spec. When\n  // `start` and `end` are omitted, all decorations in the set are\n  // considered. When `predicate` isn't given, all decorations are\n  // assumed to match.\n  find(start, end, predicate) {\n    let result = []\n    this.findInner(start == null ? 0 : start, end == null ? 1e9 : end, result, 0, predicate)\n    return result\n  }\n\n  findInner(start, end, result, offset, predicate) {\n    for (let i = 0; i < this.local.length; i++) {\n      let span = this.local[i]\n      if (span.from <= end && span.to >= start && (!predicate || predicate(span.spec)))\n        result.push(span.copy(span.from + offset, span.to + offset))\n    }\n    for (let i = 0; i < this.children.length; i += 3) {\n      if (this.children[i] < end && this.children[i + 1] > start) {\n        let childOff = this.children[i] + 1\n        this.children[i + 2].findInner(start - childOff, end - childOff, result, offset + childOff, predicate)\n      }\n    }\n  }\n\n  // :: (Mapping, Node, ?Object) → DecorationSet\n  // Map the set of decorations in response to a change in the\n  // document.\n  //\n  //   options::- An optional set of options.\n  //\n  //     onRemove:: ?(decorationSpec: Object)\n  //     When given, this function will be called for each decoration\n  //     that gets dropped as a result of the mapping, passing the\n  //     spec of that decoration.\n  map(mapping, doc, options) {\n    if (this == empty || mapping.maps.length == 0) return this\n    return this.mapInner(mapping, doc, 0, 0, options || noSpec)\n  }\n\n  mapInner(mapping, node, offset, oldOffset, options) {\n    let newLocal\n    for (let i = 0; i < this.local.length; i++) {\n      let mapped = this.local[i].map(mapping, offset, oldOffset)\n      if (mapped && mapped.type.valid(node, mapped)) (newLocal || (newLocal = [])).push(mapped)\n      else if (options.onRemove) options.onRemove(this.local[i].spec)\n    }\n\n    if (this.children.length)\n      return mapChildren(this.children, newLocal, mapping, node, offset, oldOffset, options)\n    else\n      return newLocal ? new DecorationSet(newLocal.sort(byPos)) : empty\n  }\n\n  // :: (Node, [Decoration]) → DecorationSet\n  // Add the given array of decorations to the ones in the set,\n  // producing a new set. Needs access to the current document to\n  // create the appropriate tree structure.\n  add(doc, decorations) {\n    if (!decorations.length) return this\n    if (this == empty) return DecorationSet.create(doc, decorations)\n    return this.addInner(doc, decorations, 0)\n  }\n\n  addInner(doc, decorations, offset) {\n    let children, childIndex = 0\n    doc.forEach((childNode, childOffset) => {\n      let baseOffset = childOffset + offset, found\n      if (!(found = takeSpansForNode(decorations, childNode, baseOffset))) return\n\n      if (!children) children = this.children.slice()\n      while (childIndex < children.length && children[childIndex] < childOffset) childIndex += 3\n      if (children[childIndex] == childOffset)\n        children[childIndex + 2] = children[childIndex + 2].addInner(childNode, found, baseOffset + 1)\n      else\n        children.splice(childIndex, 0, childOffset, childOffset + childNode.nodeSize, buildTree(found, childNode, baseOffset + 1, noSpec))\n      childIndex += 3\n    })\n\n    let local = moveSpans(childIndex ? withoutNulls(decorations) : decorations, -offset)\n    return new DecorationSet(local.length ? this.local.concat(local).sort(byPos) : this.local,\n                             children || this.children)\n  }\n\n  // :: ([Decoration]) → DecorationSet\n  // Create a new set that contains the decorations in this set, minus\n  // the ones in the given array.\n  remove(decorations) {\n    if (decorations.length == 0 || this == empty) return this\n    return this.removeInner(decorations, 0)\n  }\n\n  removeInner(decorations, offset) {\n    let children = this.children, local = this.local\n    for (let i = 0; i < children.length; i += 3) {\n      let found, from = children[i] + offset, to = children[i + 1] + offset\n      for (let j = 0, span; j < decorations.length; j++) if (span = decorations[j]) {\n        if (span.from > from && span.to < to) {\n          decorations[j] = null\n          ;(found || (found = [])).push(span)\n        }\n      }\n      if (!found) continue\n      if (children == this.children) children = this.children.slice()\n      let removed = children[i + 2].removeInner(found, from + 1)\n      if (removed != empty) {\n        children[i + 2] = removed\n      } else {\n        children.splice(i, 3)\n        i -= 3\n      }\n    }\n    if (local.length) for (let i = 0, span; i < decorations.length; i++) if (span = decorations[i]) {\n      for (let j = 0; j < local.length; j++) if (local[j].eq(span, offset)) {\n        if (local == this.local) local = this.local.slice()\n        local.splice(j--, 1)\n      }\n    }\n    if (children == this.children && local == this.local) return this\n    return local.length || children.length ? new DecorationSet(local, children) : empty\n  }\n\n  forChild(offset, node) {\n    if (this == empty) return this\n    if (node.isLeaf) return DecorationSet.empty\n\n    let child, local\n    for (let i = 0; i < this.children.length; i += 3) if (this.children[i] >= offset) {\n      if (this.children[i] == offset) child = this.children[i + 2]\n      break\n    }\n    let start = offset + 1, end = start + node.content.size\n    for (let i = 0; i < this.local.length; i++) {\n      let dec = this.local[i]\n      if (dec.from < end && dec.to > start && (dec.type instanceof InlineType)) {\n        let from = Math.max(start, dec.from) - start, to = Math.min(end, dec.to) - start\n        if (from < to) (local || (local = [])).push(dec.copy(from, to))\n      }\n    }\n    if (local) {\n      let localSet = new DecorationSet(local.sort(byPos))\n      return child ? new DecorationGroup([localSet, child]) : localSet\n    }\n    return child || empty\n  }\n\n  eq(other) {\n    if (this == other) return true\n    if (!(other instanceof DecorationSet) ||\n        this.local.length != other.local.length ||\n        this.children.length != other.children.length) return false\n    for (let i = 0; i < this.local.length; i++)\n      if (!this.local[i].eq(other.local[i])) return false\n    for (let i = 0; i < this.children.length; i += 3)\n      if (this.children[i] != other.children[i] ||\n          this.children[i + 1] != other.children[i + 1] ||\n          !this.children[i + 2].eq(other.children[i + 2])) return false\n    return true\n  }\n\n  locals(node) {\n    return removeOverlap(this.localsInner(node))\n  }\n\n  localsInner(node) {\n    if (this == empty) return none\n    if (node.inlineContent || !this.local.some(InlineType.is)) return this.local\n    let result = []\n    for (let i = 0; i < this.local.length; i++) {\n      if (!(this.local[i].type instanceof InlineType))\n        result.push(this.local[i])\n    }\n    return result\n  }\n}\n\nconst empty = new DecorationSet()\n\n// :: DecorationSet\n// The empty set of decorations.\nDecorationSet.empty = empty\n\nDecorationSet.removeOverlap = removeOverlap\n\n// :- An abstraction that allows the code dealing with decorations to\n// treat multiple DecorationSet objects as if it were a single object\n// with (a subset of) the same interface.\nclass DecorationGroup {\n  constructor(members) {\n    this.members = members\n  }\n\n  forChild(offset, child) {\n    if (child.isLeaf) return DecorationSet.empty\n    let found = []\n    for (let i = 0; i < this.members.length; i++) {\n      let result = this.members[i].forChild(offset, child)\n      if (result == empty) continue\n      if (result instanceof DecorationGroup) found = found.concat(result.members)\n      else found.push(result)\n    }\n    return DecorationGroup.from(found)\n  }\n\n  eq(other) {\n    if (!(other instanceof DecorationGroup) ||\n        other.members.length != this.members.length) return false\n    for (let i = 0; i < this.members.length; i++)\n      if (!this.members[i].eq(other.members[i])) return false\n    return true\n  }\n\n  locals(node) {\n    let result, sorted = true\n    for (let i = 0; i < this.members.length; i++) {\n      let locals = this.members[i].localsInner(node)\n      if (!locals.length) continue\n      if (!result) {\n        result = locals\n      } else {\n        if (sorted) {\n          result = result.slice()\n          sorted = false\n        }\n        for (let j = 0; j < locals.length; j++) result.push(locals[j])\n      }\n    }\n    return result ? removeOverlap(sorted ? result : result.sort(byPos)) : none\n  }\n\n  // : ([DecorationSet]) → union<DecorationSet, DecorationGroup>\n  // Create a group for the given array of decoration sets, or return\n  // a single set when possible.\n  static from(members) {\n    switch (members.length) {\n      case 0: return empty\n      case 1: return members[0]\n      default: return new DecorationGroup(members)\n    }\n  }\n}\n\nfunction mapChildren(oldChildren, newLocal, mapping, node, offset, oldOffset, options) {\n  let children = oldChildren.slice()\n\n  // Mark the children that are directly touched by changes, and\n  // move those that are after the changes.\n  let shift = (oldStart, oldEnd, newStart, newEnd) => {\n    for (let i = 0; i < children.length; i += 3) {\n      let end = children[i + 1], dSize\n      if (end == -1 || oldStart > end + oldOffset) continue\n      if (oldEnd >= children[i] + oldOffset) {\n        children[i + 1] = -1\n      } else if (newStart >= offset && (dSize = (newEnd - newStart) - (oldEnd - oldStart))) {\n        children[i] += dSize\n        children[i + 1] += dSize\n      }\n    }\n  }\n  for (let i = 0; i < mapping.maps.length; i++) mapping.maps[i].forEach(shift)\n\n  // Find the child nodes that still correspond to a single node,\n  // recursively call mapInner on them and update their positions.\n  let mustRebuild = false\n  for (let i = 0; i < children.length; i += 3) if (children[i + 1] == -1) { // Touched nodes\n    let from = mapping.map(children[i] + oldOffset), fromLocal = from - offset\n    if (fromLocal < 0 || fromLocal >= node.content.size) {\n      mustRebuild = true\n      continue\n    }\n    // Must read oldChildren because children was tagged with -1\n    let to = mapping.map(oldChildren[i + 1] + oldOffset, -1), toLocal = to - offset\n    let {index, offset: childOffset} = node.content.findIndex(fromLocal)\n    let childNode = node.maybeChild(index)\n    if (childNode && childOffset == fromLocal && childOffset + childNode.nodeSize == toLocal) {\n      let mapped = children[i + 2].mapInner(mapping, childNode, from + 1, children[i] + oldOffset + 1, options)\n      if (mapped != empty) {\n        children[i] = fromLocal\n        children[i + 1] = toLocal\n        children[i + 2] = mapped\n      } else {\n        children[i + 1] = -2\n        mustRebuild = true\n      }\n    } else {\n      mustRebuild = true\n    }\n  }\n\n  // Remaining children must be collected and rebuilt into the appropriate structure\n  if (mustRebuild) {\n    let decorations = mapAndGatherRemainingDecorations(children, oldChildren, newLocal || [], mapping,\n                                                       offset, oldOffset, options)\n    let built = buildTree(decorations, node, 0, options)\n    newLocal = built.local\n    for (let i = 0; i < children.length; i += 3) if (children[i + 1] < 0) {\n      children.splice(i, 3)\n      i -= 3\n    }\n    for (let i = 0, j = 0; i < built.children.length; i += 3) {\n      let from = built.children[i]\n      while (j < children.length && children[j] < from) j += 3\n      children.splice(j, 0, built.children[i], built.children[i + 1], built.children[i + 2])\n    }\n  }\n\n  return new DecorationSet(newLocal && newLocal.sort(byPos), children)\n}\n\nfunction moveSpans(spans, offset) {\n  if (!offset || !spans.length) return spans\n  let result = []\n  for (let i = 0; i < spans.length; i++) {\n    let span = spans[i]\n    result.push(new Decoration(span.from + offset, span.to + offset, span.type))\n  }\n  return result\n}\n\nfunction mapAndGatherRemainingDecorations(children, oldChildren, decorations, mapping, offset, oldOffset, options) {\n  // Gather all decorations from the remaining marked children\n  function gather(set, oldOffset) {\n    for (let i = 0; i < set.local.length; i++) {\n      let mapped = set.local[i].map(mapping, offset, oldOffset)\n      if (mapped) decorations.push(mapped)\n      else if (options.onRemove) options.onRemove(set.local[i].spec)\n    }\n    for (let i = 0; i < set.children.length; i += 3)\n      gather(set.children[i + 2], set.children[i] + oldOffset + 1)\n  }\n  for (let i = 0; i < children.length; i += 3) if (children[i + 1] == -1)\n    gather(children[i + 2], oldChildren[i] + oldOffset + 1)\n\n  return decorations\n}\n\nfunction takeSpansForNode(spans, node, offset) {\n  if (node.isLeaf) return null\n  let end = offset + node.nodeSize, found = null\n  for (let i = 0, span; i < spans.length; i++) {\n    if ((span = spans[i]) && span.from > offset && span.to < end) {\n      ;(found || (found = [])).push(span)\n      spans[i] = null\n    }\n  }\n  return found\n}\n\nfunction withoutNulls(array) {\n  let result = []\n  for (let i = 0; i < array.length; i++)\n    if (array[i] != null) result.push(array[i])\n  return result\n}\n\n// : ([Decoration], Node, number) → DecorationSet\n// Build up a tree that corresponds to a set of decorations. `offset`\n// is a base offset that should be subtractet from the `from` and `to`\n// positions in the spans (so that we don't have to allocate new spans\n// for recursive calls).\nfunction buildTree(spans, node, offset, options) {\n  let children = [], hasNulls = false\n  node.forEach((childNode, localStart) => {\n    let found = takeSpansForNode(spans, childNode, localStart + offset)\n    if (found) {\n      hasNulls = true\n      let subtree = buildTree(found, childNode, offset + localStart + 1, options)\n      if (subtree != empty)\n        children.push(localStart, localStart + childNode.nodeSize, subtree)\n    }\n  })\n  let locals = moveSpans(hasNulls ? withoutNulls(spans) : spans, -offset).sort(byPos)\n  for (let i = 0; i < locals.length; i++) if (!locals[i].type.valid(node, locals[i])) {\n    if (options.onRemove) options.onRemove(locals[i].spec)\n    locals.splice(i--, 1)\n  }\n  return locals.length || children.length ? new DecorationSet(locals, children) : empty\n}\n\n// : (Decoration, Decoration) → number\n// Used to sort decorations so that ones with a low start position\n// come first, and within a set with the same start position, those\n// with an smaller end position come first.\nfunction byPos(a, b) {\n  return a.from - b.from || a.to - b.to\n}\n\n// : ([Decoration]) → [Decoration]\n// Scan a sorted array of decorations for partially overlapping spans,\n// and split those so that only fully overlapping spans are left (to\n// make subsequent rendering easier). Will return the input array if\n// no partially overlapping spans are found (the common case).\nfunction removeOverlap(spans) {\n  let working = spans\n  for (let i = 0; i < working.length - 1; i++) {\n    let span = working[i]\n    if (span.from != span.to) for (let j = i + 1; j < working.length; j++) {\n      let next = working[j]\n      if (next.from == span.from) {\n        if (next.to != span.to) {\n          if (working == spans) working = spans.slice()\n          // Followed by a partially overlapping larger span. Split that\n          // span.\n          working[j] = next.copy(next.from, span.to)\n          insertAhead(working, j + 1, next.copy(span.to, next.to))\n        }\n        continue\n      } else {\n        if (next.from < span.to) {\n          if (working == spans) working = spans.slice()\n          // The end of this one overlaps with a subsequent span. Split\n          // this one.\n          working[i] = span.copy(span.from, next.from)\n          insertAhead(working, j, span.copy(next.from, span.to))\n        }\n        break\n      }\n    }\n  }\n  return working\n}\n\nfunction insertAhead(array, i, deco) {\n  while (i < array.length && byPos(deco, array[i]) > 0) i++\n  array.splice(i, 0, deco)\n}\n\n// : (EditorView) → union<DecorationSet, DecorationGroup>\n// Get the decorations associated with the current props of a view.\nexport function viewDecorations(view) {\n  let found = []\n  view.someProp(\"decorations\", f => {\n    let result = f(view.state)\n    if (result && result != empty) found.push(result)\n  })\n  if (view.cursorWrapper)\n    found.push(DecorationSet.create(view.state.doc, [view.cursorWrapper.deco]))\n  return DecorationGroup.from(found)\n}\n","\n    /*!\n    * tiptap-utils v1.10.0\n    * (c) 2020 Scrumpy UG (limited liability)\n    * @license MIT\n    */\n  \nimport { findSelectedNodeOfType, findParentNode } from 'prosemirror-utils';\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n  return arr2;\n}\n\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction getMarkAttrs(state, type) {\n  var _state$selection = state.selection,\n      from = _state$selection.from,\n      to = _state$selection.to;\n  var marks = [];\n  state.doc.nodesBetween(from, to, function (node) {\n    marks = [].concat(_toConsumableArray(marks), _toConsumableArray(node.marks));\n  });\n  var mark = marks.find(function (markItem) {\n    return markItem.type.name === type.name;\n  });\n\n  if (mark) {\n    return mark.attrs;\n  }\n\n  return {};\n}\n\nfunction getNodeAttrs(state, type) {\n  var _state$selection = state.selection,\n      from = _state$selection.from,\n      to = _state$selection.to;\n  var nodes = [];\n  state.doc.nodesBetween(from, to, function (node) {\n    nodes = [].concat(_toConsumableArray(nodes), [node]);\n  });\n  var node = nodes.reverse().find(function (nodeItem) {\n    return nodeItem.type.name === type.name;\n  });\n\n  if (node) {\n    return node.attrs;\n  }\n\n  return {};\n}\n\nfunction getMarkRange() {\n  var $pos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n  var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n  if (!$pos || !type) {\n    return false;\n  }\n\n  var start = $pos.parent.childAfter($pos.parentOffset);\n\n  if (!start.node) {\n    return false;\n  }\n\n  var link = start.node.marks.find(function (mark) {\n    return mark.type === type;\n  });\n\n  if (!link) {\n    return false;\n  }\n\n  var startIndex = $pos.index();\n  var startPos = $pos.start() + start.offset;\n  var endIndex = startIndex + 1;\n  var endPos = startPos + start.node.nodeSize;\n\n  while (startIndex > 0 && link.isInSet($pos.parent.child(startIndex - 1).marks)) {\n    startIndex -= 1;\n    startPos -= $pos.parent.child(startIndex).nodeSize;\n  }\n\n  while (endIndex < $pos.parent.childCount && link.isInSet($pos.parent.child(endIndex).marks)) {\n    endPos += $pos.parent.child(endIndex).nodeSize;\n    endIndex += 1;\n  }\n\n  return {\n    from: startPos,\n    to: endPos\n  };\n}\n\nfunction markIsActive(state, type) {\n  var _state$selection = state.selection,\n      from = _state$selection.from,\n      $from = _state$selection.$from,\n      to = _state$selection.to,\n      empty = _state$selection.empty;\n\n  if (empty) {\n    return !!type.isInSet(state.storedMarks || $from.marks());\n  }\n\n  return !!state.doc.rangeHasMark(from, to, type);\n}\n\nfunction nodeEqualsType(_ref) {\n  var types = _ref.types,\n      node = _ref.node;\n  return Array.isArray(types) && types.includes(node.type) || node.type === types;\n}\n\nfunction nodeIsActive(state, type) {\n  var attrs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n  var predicate = function predicate(node) {\n    return node.type === type;\n  };\n\n  var node = findSelectedNodeOfType(type)(state.selection) || findParentNode(predicate)(state.selection);\n\n  if (!Object.keys(attrs).length || !node) {\n    return !!node;\n  }\n\n  return node.node.hasMarkup(type, _objectSpread2(_objectSpread2({}, node.node.attrs), attrs));\n}\n\nexport { getMarkAttrs, getMarkRange, getNodeAttrs, markIsActive, nodeEqualsType, nodeIsActive };\n","import { NodeSelection, Selection } from 'prosemirror-state';\nimport { Fragment } from 'prosemirror-model';\nimport { findParentNodeOfType, findPositionOfNodeBefore } from './selection';\nimport {\n  cloneTr,\n  isNodeSelection,\n  replaceNodeAtPos,\n  removeNodeAtPos,\n  canInsert,\n  isEmptyParagraph\n} from './helpers';\n\n// :: (nodeType: union<NodeType, [NodeType]>) → (tr: Transaction) → Transaction\n// Returns a new transaction that removes a node of a given `nodeType`. It will return an original transaction if parent node hasn't been found.\n//\n// ```javascript\n// dispatch(\n//   removeParentNodeOfType(schema.nodes.table)(tr)\n// );\n// ```\nexport const removeParentNodeOfType = nodeType => tr => {\n  const parent = findParentNodeOfType(nodeType)(tr.selection);\n  if (parent) {\n    return removeNodeAtPos(parent.pos)(tr);\n  }\n  return tr;\n};\n\n// :: (nodeType: union<NodeType, [NodeType]>, content: union<ProseMirrorNode, Fragment>) → (tr: Transaction) → Transaction\n// Returns a new transaction that replaces parent node of a given `nodeType` with the given `content`. It will return an original transaction if either parent node hasn't been found or replacing is not possible.\n//\n// ```javascript\n// const node = schema.nodes.paragraph.createChecked({}, schema.text('new'));\n//\n// dispatch(\n//  replaceParentNodeOfType(schema.nodes.table, node)(tr)\n// );\n// ```\nexport const replaceParentNodeOfType = (nodeType, content) => tr => {\n  if (!Array.isArray(nodeType)) {\n    nodeType = [nodeType];\n  }\n  for (let i = 0, count = nodeType.length; i < count; i++) {\n    const parent = findParentNodeOfType(nodeType[i])(tr.selection);\n    if (parent) {\n      const newTr = replaceNodeAtPos(parent.pos, content)(tr);\n      if (newTr !== tr) {\n        return newTr;\n      }\n    }\n  }\n  return tr;\n};\n\n// :: (tr: Transaction) → Transaction\n// Returns a new transaction that removes selected node. It will return an original transaction if current selection is not a `NodeSelection`.\n//\n// ```javascript\n// dispatch(\n//   removeSelectedNode(tr)\n// );\n// ```\nexport const removeSelectedNode = tr => {\n  if (isNodeSelection(tr.selection)) {\n    const from = tr.selection.$from.pos;\n    const to = tr.selection.$to.pos;\n    return cloneTr(tr.delete(from, to));\n  }\n  return tr;\n};\n\n// :: (content: union<ProseMirrorNode, ProseMirrorFragment>) → (tr: Transaction) → Transaction\n// Returns a new transaction that replaces selected node with a given `node`, keeping NodeSelection on the new `node`.\n// It will return the original transaction if either current selection is not a NodeSelection or replacing is not possible.\n//\n// ```javascript\n// const node = schema.nodes.paragraph.createChecked({}, schema.text('new'));\n// dispatch(\n//   replaceSelectedNode(node)(tr)\n// );\n// ```\nexport const replaceSelectedNode = content => tr => {\n  if (isNodeSelection(tr.selection)) {\n    const { $from, $to } = tr.selection;\n    if (\n      (content instanceof Fragment &&\n        $from.parent.canReplace($from.index(), $from.indexAfter(), content)) ||\n      $from.parent.canReplaceWith(\n        $from.index(),\n        $from.indexAfter(),\n        content.type\n      )\n    ) {\n      return cloneTr(\n        tr\n          .replaceWith($from.pos, $to.pos, content)\n          // restore node selection\n          .setSelection(new NodeSelection(tr.doc.resolve($from.pos)))\n      );\n    }\n  }\n  return tr;\n};\n\n// :: (position: number, dir: ?number) → (tr: Transaction) → Transaction\n// Returns a new transaction that tries to find a valid cursor selection starting at the given `position`\n// and searching back if `dir` is negative, and forward if positive.\n// If a valid cursor position hasn't been found, it will return the original transaction.\n//\n// ```javascript\n// dispatch(\n//   setTextSelection(5)(tr)\n// );\n// ```\nexport const setTextSelection = (position, dir = 1) => tr => {\n  const nextSelection = Selection.findFrom(tr.doc.resolve(position), dir, true);\n  if (nextSelection) {\n    return tr.setSelection(nextSelection);\n  }\n  return tr;\n};\n\nconst isSelectableNode = node => node.type && node.type.spec.selectable;\nconst shouldSelectNode = node => isSelectableNode(node) && node.type.isLeaf;\n\nconst setSelection = (node, pos, tr) => {\n  if (shouldSelectNode(node)) {\n    return tr.setSelection(new NodeSelection(tr.doc.resolve(pos)));\n  }\n  return setTextSelection(pos)(tr);\n};\n\n// :: (content: union<ProseMirrorNode, Fragment>, position: ?number, tryToReplace?: boolean) → (tr: Transaction) → Transaction\n// Returns a new transaction that inserts a given `content` at the current cursor position, or at a given `position`, if it is allowed by schema. If schema restricts such nesting, it will try to find an appropriate place for a given node in the document, looping through parent nodes up until the root document node.\n// If `tryToReplace` is true and current selection is a NodeSelection, it will replace selected node with inserted content if its allowed by schema.\n// If cursor is inside of an empty paragraph, it will try to replace that paragraph with the given content. If insertion is successful and inserted node has content, it will set cursor inside of that content.\n// It will return an original transaction if the place for insertion hasn't been found.\n//\n// ```javascript\n// const node = schema.nodes.extension.createChecked({});\n// dispatch(\n//   safeInsert(node)(tr)\n// );\n// ```\nexport const safeInsert = (content, position, tryToReplace) => tr => {\n  const hasPosition = typeof position === 'number';\n  const { $from } = tr.selection;\n  const $insertPos = hasPosition\n    ? tr.doc.resolve(position)\n    : isNodeSelection(tr.selection)\n    ? tr.doc.resolve($from.pos + 1)\n    : $from;\n  const { parent } = $insertPos;\n\n  // try to replace selected node\n  if (isNodeSelection(tr.selection) && tryToReplace) {\n    const oldTr = tr;\n    tr = replaceSelectedNode(content)(tr);\n    if (oldTr !== tr) {\n      return tr;\n    }\n  }\n\n  // try to replace an empty paragraph\n  if (isEmptyParagraph(parent)) {\n    const oldTr = tr;\n    tr = replaceParentNodeOfType(parent.type, content)(tr);\n    if (oldTr !== tr) {\n      const pos = isSelectableNode(content)\n        ? // for selectable node, selection position would be the position of the replaced parent\n          $insertPos.before($insertPos.depth)\n        : $insertPos.pos;\n      return setSelection(content, pos, tr);\n    }\n  }\n\n  // given node is allowed at the current cursor position\n  if (canInsert($insertPos, content)) {\n    tr.insert($insertPos.pos, content);\n    const pos = hasPosition\n      ? $insertPos.pos\n      : isSelectableNode(content)\n      ? // for atom nodes selection position after insertion is the previous pos\n        tr.selection.$anchor.pos - 1\n      : tr.selection.$anchor.pos;\n    return cloneTr(setSelection(content, pos, tr));\n  }\n\n  // looking for a place in the doc where the node is allowed\n  for (let i = $insertPos.depth; i > 0; i--) {\n    const pos = $insertPos.after(i);\n    const $pos = tr.doc.resolve(pos);\n    if (canInsert($pos, content)) {\n      tr.insert(pos, content);\n      return cloneTr(setSelection(content, pos, tr));\n    }\n  }\n  return tr;\n};\n\n// :: (nodeType: union<NodeType, [NodeType]>, type: ?union<NodeType, null>, attrs: ?union<Object, null>, marks?: [Mark]) → (tr: Transaction) → Transaction\n// Returns a transaction that changes the type, attributes, and/or marks of the parent node of a given `nodeType`.\n//\n// ```javascript\n// const node = schema.nodes.extension.createChecked({});\n// dispatch(\n//   setParentNodeMarkup(schema.nodes.panel, null, { panelType })(tr);\n// );\n// ```\nexport const setParentNodeMarkup = (nodeType, type, attrs, marks) => tr => {\n  const parent = findParentNodeOfType(nodeType)(tr.selection);\n  if (parent) {\n    return cloneTr(\n      tr.setNodeMarkup(\n        parent.pos,\n        type,\n        Object.assign({}, parent.node.attrs, attrs),\n        marks\n      )\n    );\n  }\n  return tr;\n};\n\n// :: (nodeType: union<NodeType, [NodeType]>) → (tr: Transaction) → Transaction\n// Returns a new transaction that sets a `NodeSelection` on a parent node of a `given nodeType`.\n//\n// ```javascript\n// dispatch(\n//   selectParentNodeOfType([tableCell, tableHeader])(state.tr)\n// );\n// ```\nexport const selectParentNodeOfType = nodeType => tr => {\n  if (!isNodeSelection(tr.selection)) {\n    const parent = findParentNodeOfType(nodeType)(tr.selection);\n    if (parent) {\n      return cloneTr(tr.setSelection(NodeSelection.create(tr.doc, parent.pos)));\n    }\n  }\n  return tr;\n};\n\n// :: (tr: Transaction) → Transaction\n// Returns a new transaction that deletes previous node.\n//\n// ```javascript\n// dispatch(\n//   removeNodeBefore(state.tr)\n// );\n// ```\nexport const removeNodeBefore = tr => {\n  const position = findPositionOfNodeBefore(tr.selection);\n  if (typeof position === 'number') {\n    return removeNodeAtPos(position)(tr);\n  }\n  return tr;\n};\n","import { NodeSelection } from 'prosemirror-state';\nimport { Fragment, Node as PMNode } from 'prosemirror-model';\nimport { TableMap } from 'prosemirror-tables';\nimport { setTextSelection } from './transforms';\nimport { findParentNodeClosestToPos } from './selection';\n\n// :: (selection: Selection) → boolean\n// Checks if current selection is a `NodeSelection`.\n//\n// ```javascript\n// if (isNodeSelection(tr.selection)) {\n//   // ...\n// }\n// ```\nexport const isNodeSelection = selection => {\n  return selection instanceof NodeSelection;\n};\n\n// (nodeType: union<NodeType, [NodeType]>) → boolean\n// Checks if the type a given `node` equals to a given `nodeType`.\nexport const equalNodeType = (nodeType, node) => {\n  return (\n    (Array.isArray(nodeType) && nodeType.indexOf(node.type) > -1) ||\n    node.type === nodeType\n  );\n};\n\n// (tr: Transaction) → Transaction\n// Creates a new transaction object from a given transaction\nexport const cloneTr = tr => {\n  return Object.assign(Object.create(tr), tr).setTime(Date.now());\n};\n\n// (position: number, content: union<ProseMirrorNode, Fragment>) → (tr: Transaction) → Transaction\n// Returns a `replace` transaction that replaces a node at a given position with the given `content`.\n// It will return the original transaction if replacing is not possible.\n// `position` should point at the position immediately before the node.\nexport const replaceNodeAtPos = (position, content) => tr => {\n  const node = tr.doc.nodeAt(position);\n  const $pos = tr.doc.resolve(position);\n  if (canReplace($pos, content)) {\n    tr = tr.replaceWith(position, position + node.nodeSize, content);\n    const start = tr.selection.$from.pos - 1;\n    // put cursor inside of the inserted node\n    tr = setTextSelection(Math.max(start, 0), -1)(tr);\n    // move cursor to the start of the node\n    tr = setTextSelection(tr.selection.$from.start())(tr);\n    return cloneTr(tr);\n  }\n  return tr;\n};\n\n// ($pos: ResolvedPos, doc: ProseMirrorNode, content: union<ProseMirrorNode, Fragment>, ) → boolean\n// Checks if replacing a node at a given `$pos` inside of the `doc` node with the given `content` is possible.\nexport const canReplace = ($pos, content) => {\n  const node = $pos.node($pos.depth);\n  return (\n    node &&\n    node.type.validContent(\n      content instanceof Fragment ? content : Fragment.from(content)\n    )\n  );\n};\n\n// (position: number) → (tr: Transaction) → Transaction\n// Returns a `delete` transaction that removes a node at a given position with the given `node`.\n// `position` should point at the position immediately before the node.\nexport const removeNodeAtPos = position => tr => {\n  const node = tr.doc.nodeAt(position);\n  return cloneTr(tr.delete(position, position + node.nodeSize));\n};\n\n// (schema: Schema) → {[key: string]: NodeType}\n// Returns a map where keys are tableRoles and values are NodeTypes.\nexport const tableNodeTypes = schema => {\n  if (schema.cached.tableNodeTypes) {\n    return schema.cached.tableNodeTypes;\n  }\n  const roles = {};\n  Object.keys(schema.nodes).forEach(type => {\n    const nodeType = schema.nodes[type];\n    if (nodeType.spec.tableRole) {\n      roles[nodeType.spec.tableRole] = nodeType;\n    }\n  });\n  schema.cached.tableNodeTypes = roles;\n  return roles;\n};\n\n// :: ($pos: ResolvedPos, content: union<ProseMirrorNode, Fragment>) → boolean\n// Checks if a given `content` can be inserted at the given `$pos`\n//\n// ```javascript\n// const { selection: { $from } } = state;\n// const node = state.schema.nodes.atom.createChecked();\n// if (canInsert($from, node)) {\n//   // ...\n// }\n// ```\nexport const canInsert = ($pos, content) => {\n  const index = $pos.index();\n\n  if (content instanceof Fragment) {\n    return $pos.parent.canReplace(index, index, content);\n  } else if (content instanceof PMNode) {\n    return $pos.parent.canReplaceWith(index, index, content.type);\n  }\n  return false;\n};\n\n// (node: ProseMirrorNode) → boolean\n// Checks if a given `node` is an empty paragraph\nexport const isEmptyParagraph = node => {\n  return !node || (node.type.name === 'paragraph' && node.nodeSize === 2);\n};\n\n// ($pos: ResolvedPos) → ?{pos: number, start: number, node: ProseMirrorNode}\n// Iterates over parent nodes, returning a table node closest to a given `$pos`.\n//\n// ```javascript\n// const table = findTableClosestToPos(state.doc.resolve(10));\n// ```\nexport const findTableClosestToPos = $pos => {\n  const predicate = node =>\n    node.type.spec.tableRole && /table/i.test(node.type.spec.tableRole);\n  return findParentNodeClosestToPos($pos, predicate);\n};\n\nexport const createCell = (cellType, cellContent = null) => {\n  if (cellContent) {\n    return cellType.createChecked(null, cellContent);\n  }\n\n  return cellType.createAndFill();\n};\n\n// (rect: {left: number, right: number, top: number, bottom: number}) → (selection: Selection) → boolean\n// Checks if a given CellSelection rect is selected\nexport const isRectSelected = rect => selection => {\n  const map = TableMap.get(selection.$anchorCell.node(-1));\n  const start = selection.$anchorCell.start(-1);\n  const cells = map.cellsInRect(rect);\n  const selectedCells = map.cellsInRect(\n    map.rectBetween(\n      selection.$anchorCell.pos - start,\n      selection.$headCell.pos - start\n    )\n  );\n\n  for (let i = 0, count = cells.length; i < count; i++) {\n    if (selectedCells.indexOf(cells[i]) === -1) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\n// This function transposes an array of array flipping the columns for rows,\n// transposition is a familiar algebra concept;\n// you can get more details here:\n// https://en.wikipedia.org/wiki/Transpose\n//\n// ```javascript\n//\n//  const arr = [\n//    ['a1', 'a2', 'a3'],\n//    ['b1', 'b2', 'b3'],\n//    ['c1', 'c2', 'c3'],\n//    ['d1', 'd2', 'd3'],\n//  ];\n//\n//  const result = transpose(arr);\n//\n//  result === [\n//    ['a1', 'b1', 'c1', 'd1'],\n//    ['a2', 'b2', 'c2', 'd2'],\n//    ['a3', 'b3', 'c3', 'd3'],\n//  ]\n// ```\nexport const transpose = array => {\n  return array[0].map((_, i) => {\n    return array.map(column => column[i]);\n  });\n};\n\n// :: (tableNode: Node) -> Array<Node>\n// This function will transform the table node\n// into a matrix of rows and columns respecting merged cells,\n// for example this table will be convert to the below:\n//\n// ```\n//  ____________________________\n// |      |      |             |\n// |  A1  |  B1  |     C1      |\n// |______|______|______ ______|\n// |      |             |      |\n// |  A2  |     B2      |      |\n// |______|______ ______|      |\n// |      |      |      |  D1  |\n// |  A3  |  B3  |  C2  |      |\n// |______|______|______|______|\n// ```\n//\n//\n// ```javascript\n// array = [\n//   [A1, B1, C1, null],\n//   [A2, B2, null, D1],\n//   [A3. B3, C2, null],\n// ]\n// ```\nexport const convertTableNodeToArrayOfRows = tableNode => {\n  const map = TableMap.get(tableNode);\n  const rows = [];\n  for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {\n    const rowCells = [];\n    const seen = {};\n\n    for (let colIndex = 0; colIndex < map.width; colIndex++) {\n      const cellPos = map.map[rowIndex * map.width + colIndex];\n      const cell = tableNode.nodeAt(cellPos);\n      const rect = map.findCell(cellPos);\n      if (seen[cellPos] || rect.top !== rowIndex) {\n        rowCells.push(null);\n        continue;\n      }\n      seen[cellPos] = true;\n\n      rowCells.push(cell);\n    }\n\n    rows.push(rowCells);\n  }\n\n  return rows;\n};\n\n// :: (tableNode: Node, tableArray: Array<Node>) -> Node\n// This function will transform a matrix of nodes\n// into table node respecting merged cells and rows configurations,\n// for example this array will be convert to the table below:\n//\n// ```javascript\n// array = [\n//   [A1, B1, C1, null],\n//   [A2, B2, null, D1],\n//   [A3. B3, C2, null],\n// ]\n// ```\n//\n// ```\n//  ____________________________\n// |      |      |             |\n// |  A1  |  B1  |     C1      |\n// |______|______|______ ______|\n// |      |             |      |\n// |  A2  |     B2      |      |\n// |______|______ ______|      |\n// |      |      |      |  D1  |\n// |  A3  |  B3  |  C2  |      |\n// |______|______|______|______|\n// ```\n//\nexport const convertArrayOfRowsToTableNode = (tableNode, arrayOfNodes) => {\n  const rowsPM = [];\n  const map = TableMap.get(tableNode);\n  for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {\n    const row = tableNode.child(rowIndex);\n    const rowCells = [];\n\n    for (let colIndex = 0; colIndex < map.width; colIndex++) {\n      if (!arrayOfNodes[rowIndex][colIndex]) {\n        continue;\n      }\n      const cellPos = map.map[rowIndex * map.width + colIndex];\n\n      const cell = arrayOfNodes[rowIndex][colIndex];\n      const oldCell = tableNode.nodeAt(cellPos);\n      const newCell = oldCell.type.createChecked(\n        Object.assign({}, cell.attrs),\n        cell.content,\n        cell.marks\n      );\n      rowCells.push(newCell);\n    }\n\n    rowsPM.push(row.type.createChecked(row.attrs, rowCells, row.marks));\n  }\n\n  const newTable = tableNode.type.createChecked(\n    tableNode.attrs,\n    rowsPM,\n    tableNode.marks\n  );\n\n  return newTable;\n};\n\nexport const moveTableColumn = (\n  table,\n  indexesOrigin,\n  indexesTarget,\n  direction\n) => {\n  let rows = transpose(convertTableNodeToArrayOfRows(table.node));\n\n  rows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction);\n  rows = transpose(rows);\n\n  return convertArrayOfRowsToTableNode(table.node, rows);\n};\n\nexport const moveTableRow = (\n  table,\n  indexesOrigin,\n  indexesTarget,\n  direction\n) => {\n  let rows = convertTableNodeToArrayOfRows(table.node);\n\n  rows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction);\n\n  return convertArrayOfRowsToTableNode(table.node, rows);\n};\n\nconst moveRowInArrayOfRows = (\n  rows,\n  indexesOrigin,\n  indexesTarget,\n  directionOverride\n) => {\n  let direction = indexesOrigin[0] > indexesTarget[0] ? -1 : 1;\n\n  const rowsExtracted = rows.splice(indexesOrigin[0], indexesOrigin.length);\n  const positionOffset = rowsExtracted.length % 2 === 0 ? 1 : 0;\n  let target;\n\n  if (directionOverride === -1 && direction === 1) {\n    target = indexesTarget[0] - 1;\n  } else if (directionOverride === 1 && direction === -1) {\n    target = indexesTarget[indexesTarget.length - 1] - positionOffset + 1;\n  } else {\n    target =\n      direction === -1\n        ? indexesTarget[0]\n        : indexesTarget[indexesTarget.length - 1] - positionOffset;\n  }\n\n  rows.splice.apply(rows, [target, 0].concat(rowsExtracted));\n  return rows;\n};\n\nexport const checkInvalidMovements = (\n  originIndex,\n  targetIndex,\n  targets,\n  type\n) => {\n  const direction = originIndex > targetIndex ? -1 : 1;\n  const errorMessage = `Target position is invalid, you can't move the ${type} ${originIndex} to ${targetIndex}, the target can't be split. You could use tryToFit option.`;\n\n  if (direction === 1) {\n    if (targets.slice(0, targets.length - 1).indexOf(targetIndex) !== -1) {\n      throw new Error(errorMessage);\n    }\n  } else {\n    if (targets.slice(1).indexOf(targetIndex) !== -1) {\n      throw new Error(errorMessage);\n    }\n  }\n\n  return true;\n};\n","import {\n  CellSelection,\n  TableMap,\n  addColumn,\n  addRow,\n  removeColumn,\n  removeRow\n} from 'prosemirror-tables';\nimport { Selection } from 'prosemirror-state';\nimport { findParentNode, findParentNodeClosestToPos } from './selection';\nimport { setTextSelection, safeInsert } from './transforms';\nimport {\n  cloneTr,\n  tableNodeTypes,\n  findTableClosestToPos,\n  createCell,\n  isRectSelected,\n  moveTableRow,\n  moveTableColumn,\n  checkInvalidMovements\n} from './helpers';\n\n// :: (selection: Selection) → ?{pos: number, start: number, node: ProseMirrorNode}\n// Iterates over parent nodes, returning the closest table node.\n//\n// ```javascript\n// const table = findTable(selection);\n// ```\nexport const findTable = selection =>\n  findParentNode(\n    node => node.type.spec.tableRole && node.type.spec.tableRole === 'table'\n  )(selection);\n\n// :: (selection: Selection) → boolean\n// Checks if current selection is a `CellSelection`.\n//\n// ```javascript\n// if (isCellSelection(selection)) {\n//   // ...\n// }\n// ```\nexport const isCellSelection = selection => {\n  return selection instanceof CellSelection;\n};\n\n// :: (selection: Selection) → ?{left: number, right: number, top: number, bottom: number}\n// Get the selection rectangle. Returns `undefined` if selection is not a CellSelection.\n//\n// ```javascript\n// const rect = getSelectionRect(selection);\n// ```\nexport const getSelectionRect = selection => {\n  if (!isCellSelection(selection)) {\n    return;\n  }\n  const start = selection.$anchorCell.start(-1);\n  const map = TableMap.get(selection.$anchorCell.node(-1));\n  return map.rectBetween(\n    selection.$anchorCell.pos - start,\n    selection.$headCell.pos - start\n  );\n};\n\n// :: (columnIndex: number) → (selection: Selection) → boolean\n// Checks if entire column at index `columnIndex` is selected.\n//\n// ```javascript\n// const className = isColumnSelected(i)(selection) ? 'selected' : '';\n// ```\nexport const isColumnSelected = columnIndex => selection => {\n  if (isCellSelection(selection)) {\n    const map = TableMap.get(selection.$anchorCell.node(-1));\n    return isRectSelected({\n      left: columnIndex,\n      right: columnIndex + 1,\n      top: 0,\n      bottom: map.height\n    })(selection);\n  }\n\n  return false;\n};\n\n// :: (rowIndex: number) → (selection: Selection) → boolean\n// Checks if entire row at index `rowIndex` is selected.\n//\n// ```javascript\n// const className = isRowSelected(i)(selection) ? 'selected' : '';\n// ```\nexport const isRowSelected = rowIndex => selection => {\n  if (isCellSelection(selection)) {\n    const map = TableMap.get(selection.$anchorCell.node(-1));\n    return isRectSelected({\n      left: 0,\n      right: map.width,\n      top: rowIndex,\n      bottom: rowIndex + 1\n    })(selection);\n  }\n\n  return false;\n};\n\n// :: (selection: Selection) → boolean\n// Checks if entire table is selected\n//\n// ```javascript\n// const className = isTableSelected(selection) ? 'selected' : '';\n// ```\nexport const isTableSelected = selection => {\n  if (isCellSelection(selection)) {\n    const map = TableMap.get(selection.$anchorCell.node(-1));\n    return isRectSelected({\n      left: 0,\n      right: map.width,\n      top: 0,\n      bottom: map.height\n    })(selection);\n  }\n\n  return false;\n};\n\n// :: (columnIndex: union<number, [number]>) → (selection: Selection) → ?[{pos: number, start: number, node: ProseMirrorNode}]\n// Returns an array of cells in a column(s), where `columnIndex` could be a column index or an array of column indexes.\n//\n// ```javascript\n// const cells = getCellsInColumn(i)(selection); // [{node, pos}, {node, pos}]\n// ```\nexport const getCellsInColumn = columnIndex => selection => {\n  const table = findTable(selection);\n  if (table) {\n    const map = TableMap.get(table.node);\n    const indexes = Array.isArray(columnIndex)\n      ? columnIndex\n      : Array.from([columnIndex]);\n    return indexes.reduce((acc, index) => {\n      if (index >= 0 && index <= map.width - 1) {\n        const cells = map.cellsInRect({\n          left: index,\n          right: index + 1,\n          top: 0,\n          bottom: map.height\n        });\n        return acc.concat(\n          cells.map(nodePos => {\n            const node = table.node.nodeAt(nodePos);\n            const pos = nodePos + table.start;\n            return { pos, start: pos + 1, node };\n          })\n        );\n      }\n    }, []);\n  }\n};\n\n// :: (rowIndex: union<number, [number]>) → (selection: Selection) → ?[{pos: number, start: number, node: ProseMirrorNode}]\n// Returns an array of cells in a row(s), where `rowIndex` could be a row index or an array of row indexes.\n//\n// ```javascript\n// const cells = getCellsInRow(i)(selection); // [{node, pos}, {node, pos}]\n// ```\nexport const getCellsInRow = rowIndex => selection => {\n  const table = findTable(selection);\n  if (table) {\n    const map = TableMap.get(table.node);\n    const indexes = Array.isArray(rowIndex) ? rowIndex : Array.from([rowIndex]);\n    return indexes.reduce((acc, index) => {\n      if (index >= 0 && index <= map.height - 1) {\n        const cells = map.cellsInRect({\n          left: 0,\n          right: map.width,\n          top: index,\n          bottom: index + 1\n        });\n        return acc.concat(\n          cells.map(nodePos => {\n            const node = table.node.nodeAt(nodePos);\n            const pos = nodePos + table.start;\n            return { pos, start: pos + 1, node };\n          })\n        );\n      }\n    }, []);\n  }\n};\n\n// :: (selection: Selection) → ?[{pos: number, start: number, node: ProseMirrorNode}]\n// Returns an array of all cells in a table.\n//\n// ```javascript\n// const cells = getCellsInTable(selection); // [{node, pos}, {node, pos}]\n// ```\nexport const getCellsInTable = selection => {\n  const table = findTable(selection);\n  if (table) {\n    const map = TableMap.get(table.node);\n    const cells = map.cellsInRect({\n      left: 0,\n      right: map.width,\n      top: 0,\n      bottom: map.height\n    });\n    return cells.map(nodePos => {\n      const node = table.node.nodeAt(nodePos);\n      const pos = nodePos + table.start;\n      return { pos, start: pos + 1, node };\n    });\n  }\n};\n\nconst select = type => (index, expand) => tr => {\n  const table = findTable(tr.selection);\n  const isRowSelection = type === 'row';\n  if (table) {\n    const map = TableMap.get(table.node);\n\n    // Check if the index is valid\n    if (index >= 0 && index < (isRowSelection ? map.height : map.width)) {\n      let left = isRowSelection ? 0 : index;\n      let top = isRowSelection ? index : 0;\n      let right = isRowSelection ? map.width : index + 1;\n      let bottom = isRowSelection ? index + 1 : map.height;\n\n      if (expand) {\n        const cell = findCellClosestToPos(tr.selection.$from);\n        if (!cell) {\n          return tr;\n        }\n\n        const selRect = map.findCell(cell.pos - table.start);\n        if (isRowSelection) {\n          top = Math.min(top, selRect.top);\n          bottom = Math.max(bottom, selRect.bottom);\n        } else {\n          left = Math.min(left, selRect.left);\n          right = Math.max(right, selRect.right);\n        }\n      }\n\n      const cellsInFirstRow = map.cellsInRect({\n        left,\n        top,\n        right: isRowSelection ? right : left + 1,\n        bottom: isRowSelection ? top + 1 : bottom\n      });\n\n      const cellsInLastRow =\n        bottom - top === 1\n          ? cellsInFirstRow\n          : map.cellsInRect({\n              left: isRowSelection ? left : right - 1,\n              top: isRowSelection ? bottom - 1 : top,\n              right,\n              bottom\n            });\n\n      const head = table.start + cellsInFirstRow[0];\n      const anchor = table.start + cellsInLastRow[cellsInLastRow.length - 1];\n      const $head = tr.doc.resolve(head);\n      const $anchor = tr.doc.resolve(anchor);\n\n      return cloneTr(tr.setSelection(new CellSelection($anchor, $head)));\n    }\n  }\n  return tr;\n};\n\n// :: (columnIndex: number, expand: ?boolean) → (tr: Transaction) → Transaction\n// Returns a new transaction that creates a `CellSelection` on a column at index `columnIndex`.\n// Use the optional `expand` param to extend from current selection.\n//\n// ```javascript\n// dispatch(\n//   selectColumn(i)(state.tr)\n// );\n// ```\nexport const selectColumn = select('column');\n\n// :: (rowIndex: number, expand: ?boolean) → (tr: Transaction) → Transaction\n// Returns a new transaction that creates a `CellSelection` on a column at index `rowIndex`.\n// Use the optional `expand` param to extend from current selection.\n//\n// ```javascript\n// dispatch(\n//   selectRow(i)(state.tr)\n// );\n// ```\nexport const selectRow = select('row');\n\n// :: (selection: Selection) → (tr: Transaction) → Transaction\n// Returns a new transaction that creates a `CellSelection` on the entire table.\n//\n// ```javascript\n// dispatch(\n//   selectTable(i)(state.tr)\n// );\n// ```\nexport const selectTable = tr => {\n  const table = findTable(tr.selection);\n  if (table) {\n    const { map } = TableMap.get(table.node);\n    if (map && map.length) {\n      const head = table.start + map[0];\n      const anchor = table.start + map[map.length - 1];\n      const $head = tr.doc.resolve(head);\n      const $anchor = tr.doc.resolve(anchor);\n\n      return cloneTr(tr.setSelection(new CellSelection($anchor, $head)));\n    }\n  }\n  return tr;\n};\n\n// :: (cell: {pos: number, node: ProseMirrorNode}, schema: Schema) → (tr: Transaction) → Transaction\n// Returns a new transaction that clears the content of a given `cell`.\n//\n// ```javascript\n// const $pos = state.doc.resolve(13);\n// dispatch(\n//   emptyCell(findCellClosestToPos($pos), state.schema)(state.tr)\n// );\n// ```\nexport const emptyCell = (cell, schema) => tr => {\n  if (cell) {\n    const { content } = tableNodeTypes(schema).cell.createAndFill();\n    if (!cell.node.content.eq(content)) {\n      tr.replaceWith(cell.pos + 1, cell.pos + cell.node.nodeSize, content);\n      return cloneTr(tr);\n    }\n  }\n  return tr;\n};\n\n// :: (columnIndex: number) → (tr: Transaction) → Transaction\n// Returns a new transaction that adds a new column at index `columnIndex`.\n//\n// ```javascript\n// dispatch(\n//   addColumnAt(i)(state.tr)\n// );\n// ```\nexport const addColumnAt = columnIndex => tr => {\n  const table = findTable(tr.selection);\n  if (table) {\n    const map = TableMap.get(table.node);\n    if (columnIndex >= 0 && columnIndex <= map.width) {\n      return cloneTr(\n        addColumn(\n          tr,\n          {\n            map,\n            tableStart: table.start,\n            table: table.node\n          },\n          columnIndex\n        )\n      );\n    }\n  }\n  return tr;\n};\n\n// :: (originRowIndex: number, targetRowIndex: targetColumnIndex, options?: MovementOptions) → (tr: Transaction) → Transaction\n// Returns a new transaction that moves the origin row to the target index;\n//\n// by default \"tryToFit\" is false, that means if you try to move a row to a place\n// where we will need to split a row with merged cells it'll throw an exception, for example:\n//\n// ```\n//      ____________________________\n//     |      |      |             |\n//  0  |  A1  |  B1  |     C1      |\n//     |______|______|______ ______|\n//     |      |             |      |\n//  1  |  A2  |     B2      |      |\n//     |______|______ ______|      |\n//     |      |      |      |  D1  |\n//  2  |  A3  |  B3  |  C2  |      |\n//     |______|______|______|______|\n// ```\n//\n// if you try to move the row 0 to the row index 1 with tryToFit false,\n// it'll throw an exception since you can't split the row 1;\n// but if \"tryToFit\" is true, it'll move the row using the current direction.\n//\n// We defined current direction using the target and origin values\n// if the origin is greater than the target, that means the course is `bottom-to-top`,\n// so the `tryToFit` logic will use this direction to determine\n// if we should move the column to the right or the left.\n//\n// for example, if you call the function using `moveRow(0, 1, { tryToFit: true })`\n// the result will be:\n// ```\n//      ____________________________\n//     |      |             |      |\n//  0  |  A2  |     B2      |      |\n//     |______|______ ______|      |\n//     |      |      |      |  D1  |\n//  1  |  A3  |  B3  |  C2  |      |\n//     |______|______|______|______|\n//     |      |      |             |\n//  2  |  A1  |  B1  |     C1      |\n//     |______|______|______ ______|\n// ```\n//\n// since we could put the row zero on index one,\n// we pushed to the best place to fit the row index 0,\n// in this case, row index 2.\n//\n//\n// -------- HOW TO OVERRIDE DIRECTION --------\n//\n// If you set \"tryToFit\" to \"true\", it will try to figure out the best direction\n// place to fit using the origin and target index, for example:\n//\n//\n// ```\n//      ____________________________\n//     |      |      |             |\n//  0  |  A1  |  B1  |     C1      |\n//     |______|______|______ ______|\n//     |      |             |      |\n//  1  |  A2  |     B2      |      |\n//     |______|______ ______|      |\n//     |      |      |      |  D1  |\n//  2  |  A3  |  B3  |  C2  |      |\n//     |______|______|______|______|\n//     |      |             |      |\n//  3  |  A4  |     B4      |      |\n//     |______|______ ______|      |\n//     |      |      |      |  D2  |\n//  4  |  A5  |  B5  |  C3  |      |\n//     |______|______|______|______|\n// ```\n//\n//\n// If you try to move the row 0 to row index 4 with \"tryToFit\" enabled, by default,\n// the code will put it on after the merged rows,\n// but you can override it using the \"direction\" option.\n//\n// -1: Always put the origin before the target\n// ```\n//      ____________________________\n//     |      |             |      |\n//  0  |  A2  |     B2      |      |\n//     |______|______ ______|      |\n//     |      |      |      |  D1  |\n//  1  |  A3  |  B3  |  C2  |      |\n//     |______|______|______|______|\n//     |      |      |             |\n//  2  |  A1  |  B1  |     C1      |\n//     |______|______|______ ______|\n//     |      |             |      |\n//  3  |  A4  |     B4      |      |\n//     |______|______ ______|      |\n//     |      |      |      |  D2  |\n//  4  |  A5  |  B5  |  C3  |      |\n//     |______|______|______|______|\n// ```\n//\n//  0: Automatically decide the best place to fit\n// ```\n//      ____________________________\n//     |      |             |      |\n//  0  |  A2  |     B2      |      |\n//     |______|______ ______|      |\n//     |      |      |      |  D1  |\n//  1  |  A3  |  B3  |  C2  |      |\n//     |______|______|______|______|\n//     |      |             |      |\n//  2  |  A4  |     B4      |      |\n//     |______|______ ______|      |\n//     |      |      |      |  D2  |\n//  3  |  A5  |  B5  |  C3  |      |\n//     |______|______|______|______|\n//     |      |      |             |\n//  4  |  A1  |  B1  |     C1      |\n//     |______|______|______ ______|\n// ```\n//\n//  1: Always put the origin after the target\n// ```\n//      ____________________________\n//     |      |             |      |\n//  0  |  A2  |     B2      |      |\n//     |______|______ ______|      |\n//     |      |      |      |  D1  |\n//  1  |  A3  |  B3  |  C2  |      |\n//     |______|______|______|______|\n//     |      |             |      |\n//  2  |  A4  |     B4      |      |\n//     |______|______ ______|      |\n//     |      |      |      |  D2  |\n//  3  |  A5  |  B5  |  C3  |      |\n//     |______|______|______|______|\n//     |      |      |             |\n//  4  |  A1  |  B1  |     C1      |\n//     |______|______|______ ______|\n// ```\n//\n// ```javascript\n// dispatch(\n//   moveRow(x, y, options)(state.tr)\n// );\n// ```\nexport const moveRow = (originRowIndex, targetRowIndex, opts) => tr => {\n  const defaultOptions = { tryToFit: false, direction: 0 };\n  const options = Object.assign(defaultOptions, opts);\n  const table = findTable(tr.selection);\n  if (!table) {\n    return tr;\n  }\n\n  const { indexes: indexesOriginRow } = getSelectionRangeInRow(originRowIndex)(\n    tr\n  );\n  const { indexes: indexesTargetRow } = getSelectionRangeInRow(targetRowIndex)(\n    tr\n  );\n\n  if (indexesOriginRow.indexOf(targetRowIndex) > -1) {\n    return tr;\n  }\n\n  if (!options.tryToFit && indexesTargetRow.length > 1) {\n    checkInvalidMovements(\n      originRowIndex,\n      targetRowIndex,\n      indexesTargetRow,\n      'row'\n    );\n  }\n\n  const newTable = moveTableRow(\n    table,\n    indexesOriginRow,\n    indexesTargetRow,\n    options.direction\n  );\n\n  return cloneTr(tr).replaceWith(\n    table.pos,\n    table.pos + table.node.nodeSize,\n    newTable\n  );\n};\n\n// :: (originColumnIndex: number, targetColumnIndex: targetColumnIndex, options?: MovementOptions) → (tr: Transaction) → Transaction\n// Returns a new transaction that moves the origin column to the target index;\n//\n// by default \"tryToFit\" is false, that means if you try to move a column to a place\n// where we will need to split a column with merged cells it'll throw an exception, for example:\n//\n// ```\n//    0      1         2\n//  ____________________________\n// |      |      |             |\n// |  A1  |  B1  |     C1      |\n// |______|______|______ ______|\n// |      |             |      |\n// |  A2  |     B2      |      |\n// |______|______ ______|      |\n// |      |      |      |  D1  |\n// |  A3  |  B3  |  C2  |      |\n// |______|______|______|______|\n// ```\n//\n//\n// if you try to move the column 0 to the column index 1 with tryToFit false,\n// it'll throw an exception since you can't split the column 1;\n// but if \"tryToFit\" is true, it'll move the column using the current direction.\n//\n// We defined current direction using the target and origin values\n// if the origin is greater than the target, that means the course is `right-to-left`,\n// so the `tryToFit` logic will use this direction to determine\n// if we should move the column to the right or the left.\n//\n// for example, if you call the function using `moveColumn(0, 1, { tryToFit: true })`\n// the result will be:\n//\n// ```\n//    0       1             2\n// _____________________ _______\n// |      |             |      |\n// |  B1  |     C1      |  A1  |\n// |______|______ ______|______|\n// |             |      |      |\n// |     B2      |      |  A2  |\n// |______ ______|      |______|\n// |      |      |  D1  |      |\n// |  B3  |  C2  |      |  A3  |\n// |______|______|______|______|\n// ```\n//\n// since we could put the column zero on index one,\n// we pushed to the best place to fit the column 0, in this case, column index 2.\n//\n// -------- HOW TO OVERRIDE DIRECTION --------\n//\n// If you set \"tryToFit\" to \"true\", it will try to figure out the best direction\n// place to fit using the origin and target index, for example:\n//\n//\n// ```\n//     0      1       2     3      4      5       6\n//   _________________________________________________\n//  |      |      |             |      |             |\n//  |  A1  |  B1  |     C1      |  E1  |     F1      |\n//  |______|______|______ ______|______|______ ______|\n//  |      |             |      |             |      |\n//  |  A2  |     B2      |      |     E2      |      |\n//  |______|______ ______|      |______ ______|      |\n//  |      |      |      |  D1  |      |      |  G2  |\n//  |  A3  |  B3  |  C3  |      |  E3  |  F3  |      |\n//  |______|______|______|______|______|______|______|\n// ```\n//\n//\n// If you try to move the column 0 to column index 5 with \"tryToFit\" enabled, by default,\n// the code will put it on after the merged columns,\n// but you can override it using the \"direction\" option.\n//\n// -1: Always put the origin before the target\n//\n// ```\n//     0      1       2     3      4      5       6\n//   _________________________________________________\n//  |      |             |      |      |             |\n//  |  B1  |     C1      |  A1  |  E1  |     F1      |\n//  |______|______ ______|______|______|______ ______|\n//  |             |      |      |             |      |\n//  |     B2      |      |  A2  |     E2      |      |\n//  |______ ______|      |______|______ ______|      |\n//  |      |      |  D1  |      |      |      |  G2  |\n//  |  B3  |  C3  |      |  A3  |  E3  |  F3  |      |\n//  |______|______|______|______|______|______|______|\n// ```\n//\n//  0: Automatically decide the best place to fit\n//\n// ```\n//     0      1       2     3      4      5       6\n//   _________________________________________________\n//  |      |             |      |             |      |\n//  |  B1  |     C1      |  E1  |     F1      |  A1  |\n//  |______|______ ______|______|______ ______|______|\n//  |             |      |             |      |      |\n//  |     B2      |      |     E2      |      |  A2  |\n//  |______ ______|      |______ ______|      |______|\n//  |      |      |  D1  |      |      |  G2  |      |\n//  |  B3  |  C3  |      |  E3  |  F3  |      |  A3  |\n//  |______|______|______|______|______|______|______|\n// ```\n//\n//  1: Always put the origin after the target\n//\n// ```\n//     0      1       2     3      4      5       6\n//   _________________________________________________\n//  |      |             |      |             |      |\n//  |  B1  |     C1      |  E1  |     F1      |  A1  |\n//  |______|______ ______|______|______ ______|______|\n//  |             |      |             |      |      |\n//  |     B2      |      |     E2      |      |  A2  |\n//  |______ ______|      |______ ______|      |______|\n//  |      |      |  D1  |      |      |  G2  |      |\n//  |  B3  |  C3  |      |  E3  |  F3  |      |  A3  |\n//  |______|______|______|______|______|______|______|\n// ```\n//\n// ```javascript\n// dispatch(\n//   moveColumn(x, y, options)(state.tr)\n// );\n// ```\nexport const moveColumn = (\n  originColumnIndex,\n  targetColumnIndex,\n  opts\n) => tr => {\n  const defaultOptions = { tryToFit: false, direction: 0 };\n  const options = Object.assign(defaultOptions, opts);\n  const table = findTable(tr.selection);\n  if (!table) {\n    return tr;\n  }\n\n  const { indexes: indexesOriginColumn } = getSelectionRangeInColumn(\n    originColumnIndex\n  )(tr);\n  const { indexes: indexesTargetColumn } = getSelectionRangeInColumn(\n    targetColumnIndex\n  )(tr);\n\n  if (indexesOriginColumn.indexOf(targetColumnIndex) > -1) {\n    return tr;\n  }\n\n  if (!options.tryToFit && indexesTargetColumn.length > 1) {\n    checkInvalidMovements(\n      originColumnIndex,\n      targetColumnIndex,\n      indexesTargetColumn,\n      'column'\n    );\n  }\n\n  const newTable = moveTableColumn(\n    table,\n    indexesOriginColumn,\n    indexesTargetColumn,\n    options.direction\n  );\n\n  return cloneTr(tr).replaceWith(\n    table.pos,\n    table.pos + table.node.nodeSize,\n    newTable\n  );\n};\n\n// :: (rowIndex: number, clonePreviousRow?: boolean) → (tr: Transaction) → Transaction\n// Returns a new transaction that adds a new row at index `rowIndex`. Optionally clone the previous row.\n//\n// ```javascript\n// dispatch(\n//   addRowAt(i)(state.tr)\n// );\n// ```\n//\n// ```javascript\n// dispatch(\n//   addRowAt(i, true)(state.tr)\n// );\n// ```\nexport const addRowAt = (rowIndex, clonePreviousRow) => tr => {\n  const table = findTable(tr.selection);\n  if (table) {\n    const map = TableMap.get(table.node);\n    const cloneRowIndex = rowIndex - 1;\n\n    if (clonePreviousRow && cloneRowIndex >= 0) {\n      return cloneTr(cloneRowAt(cloneRowIndex)(tr));\n    }\n\n    if (rowIndex >= 0 && rowIndex <= map.height) {\n      return cloneTr(\n        addRow(\n          tr,\n          {\n            map,\n            tableStart: table.start,\n            table: table.node\n          },\n          rowIndex\n        )\n      );\n    }\n  }\n  return tr;\n};\n\n// :: (cloneRowIndex: number) → (tr: Transaction) → Transaction\n// Returns a new transaction that adds a new row after `cloneRowIndex`, cloning the row attributes at `cloneRowIndex`.\n//\n// ```javascript\n// dispatch(\n//   cloneRowAt(i)(state.tr)\n// );\n// ```\nexport const cloneRowAt = rowIndex => tr => {\n  const table = findTable(tr.selection);\n  if (table) {\n    const map = TableMap.get(table.node);\n\n    if (rowIndex >= 0 && rowIndex <= map.height) {\n      const tableNode = table.node;\n      const tableNodes = tableNodeTypes(tableNode.type.schema);\n\n      let rowPos = table.start;\n      for (let i = 0; i < rowIndex + 1; i++) {\n        rowPos += tableNode.child(i).nodeSize;\n      }\n\n      const cloneRow = tableNode.child(rowIndex);\n      // Re-create the same nodes with same attrs, dropping the node content.\n      let cells = [];\n      let rowWidth = 0;\n      cloneRow.forEach(cell => {\n        // If we're copying a row with rowspan somewhere, we dont want to copy that cell\n        // We'll increment its span below.\n        if (cell.attrs.rowspan === 1) {\n          rowWidth += cell.attrs.colspan;\n          cells.push(\n            tableNodes[cell.type.spec.tableRole].createAndFill(\n              cell.attrs,\n              cell.marks\n            )\n          );\n        }\n      });\n\n      // If a higher row spans past our clone row, bump the higher row to cover this new row too.\n      if (rowWidth < map.width) {\n        let rowSpanCells = [];\n        for (let i = rowIndex; i >= 0; i--) {\n          let foundCells = filterCellsInRow(i, (cell, tr) => {\n            const rowspan = cell.node.attrs.rowspan;\n            const spanRange = i + rowspan;\n            return rowspan > 1 && spanRange > rowIndex;\n          })(tr);\n          rowSpanCells.push(...foundCells);\n        }\n\n        if (rowSpanCells.length) {\n          rowSpanCells.forEach(cell => {\n            tr = setCellAttrs(cell, {\n              rowspan: cell.node.attrs.rowspan + 1\n            })(tr);\n          });\n        }\n      }\n\n      return safeInsert(tableNodes.row.create(cloneRow.attrs, cells), rowPos)(\n        tr\n      );\n    }\n  }\n  return tr;\n};\n\n// :: (columnIndex: number) → (tr: Transaction) → Transaction\n// Returns a new transaction that removes a column at index `columnIndex`. If there is only one column left, it will remove the entire table.\n//\n// ```javascript\n// dispatch(\n//   removeColumnAt(i)(state.tr)\n// );\n// ```\nexport const removeColumnAt = columnIndex => tr => {\n  const table = findTable(tr.selection);\n  if (table) {\n    const map = TableMap.get(table.node);\n    if (columnIndex === 0 && map.width === 1) {\n      return removeTable(tr);\n    } else if (columnIndex >= 0 && columnIndex <= map.width) {\n      removeColumn(\n        tr,\n        {\n          map,\n          tableStart: table.start,\n          table: table.node\n        },\n        columnIndex\n      );\n      return cloneTr(tr);\n    }\n  }\n  return tr;\n};\n\n// :: (rowIndex: number) → (tr: Transaction) → Transaction\n// Returns a new transaction that removes a row at index `rowIndex`. If there is only one row left, it will remove the entire table.\n//\n// ```javascript\n// dispatch(\n//   removeRowAt(i)(state.tr)\n// );\n// ```\nexport const removeRowAt = rowIndex => tr => {\n  const table = findTable(tr.selection);\n  if (table) {\n    const map = TableMap.get(table.node);\n    if (rowIndex === 0 && map.height === 1) {\n      return removeTable(tr);\n    } else if (rowIndex >= 0 && rowIndex <= map.height) {\n      removeRow(\n        tr,\n        {\n          map,\n          tableStart: table.start,\n          table: table.node\n        },\n        rowIndex\n      );\n      return cloneTr(tr);\n    }\n  }\n  return tr;\n};\n\n// :: (tr: Transaction) → Transaction\n// Returns a new transaction that removes a table node if the cursor is inside of it.\n//\n// ```javascript\n// dispatch(\n//   removeTable(state.tr)\n// );\n// ```\nexport const removeTable = tr => {\n  const { $from } = tr.selection;\n  for (let depth = $from.depth; depth > 0; depth--) {\n    let node = $from.node(depth);\n    if (node.type.spec.tableRole === 'table') {\n      return cloneTr(tr.delete($from.before(depth), $from.after(depth)));\n    }\n  }\n  return tr;\n};\n\n// :: (tr: Transaction) → Transaction\n// Returns a new transaction that removes selected columns.\n//\n// ```javascript\n// dispatch(\n//   removeSelectedColumns(state.tr)\n// );\n// ```\nexport const removeSelectedColumns = tr => {\n  const { selection } = tr;\n  if (isTableSelected(selection)) {\n    return removeTable(tr);\n  }\n  if (isCellSelection(selection)) {\n    const table = findTable(selection);\n    if (table) {\n      const map = TableMap.get(table.node);\n      const rect = map.rectBetween(\n        selection.$anchorCell.pos - table.start,\n        selection.$headCell.pos - table.start\n      );\n\n      if (rect.left == 0 && rect.right == map.width) {\n        return false;\n      }\n\n      const pmTableRect = Object.assign({}, rect, {\n        map,\n        table: table.node,\n        tableStart: table.start\n      });\n\n      for (let i = pmTableRect.right - 1; ; i--) {\n        removeColumn(tr, pmTableRect, i);\n        if (i === pmTableRect.left) {\n          break;\n        }\n        pmTableRect.table = pmTableRect.tableStart\n          ? tr.doc.nodeAt(pmTableRect.tableStart - 1)\n          : tr.doc;\n        pmTableRect.map = TableMap.get(pmTableRect.table);\n      }\n      return cloneTr(tr);\n    }\n  }\n  return tr;\n};\n\n// :: (tr: Transaction) → Transaction\n// Returns a new transaction that removes selected rows.\n//\n// ```javascript\n// dispatch(\n//   removeSelectedRows(state.tr)\n// );\n// ```\nexport const removeSelectedRows = tr => {\n  const { selection } = tr;\n  if (isTableSelected(selection)) {\n    return removeTable(tr);\n  }\n  if (isCellSelection(selection)) {\n    const table = findTable(selection);\n    if (table) {\n      const map = TableMap.get(table.node);\n      const rect = map.rectBetween(\n        selection.$anchorCell.pos - table.start,\n        selection.$headCell.pos - table.start\n      );\n\n      if (rect.top == 0 && rect.bottom == map.height) {\n        return false;\n      }\n\n      const pmTableRect = Object.assign({}, rect, {\n        map,\n        table: table.node,\n        tableStart: table.start\n      });\n\n      for (let i = pmTableRect.bottom - 1; ; i--) {\n        removeRow(tr, pmTableRect, i);\n        if (i === pmTableRect.top) {\n          break;\n        }\n        pmTableRect.table = pmTableRect.tableStart\n          ? tr.doc.nodeAt(pmTableRect.tableStart - 1)\n          : tr.doc;\n        pmTableRect.map = TableMap.get(pmTableRect.table);\n      }\n\n      return cloneTr(tr);\n    }\n  }\n  return tr;\n};\n\n// :: ($pos: ResolvedPos) → (tr: Transaction) → Transaction\n// Returns a new transaction that removes a column closest to a given `$pos`.\n//\n// ```javascript\n// dispatch(\n//   removeColumnClosestToPos(state.doc.resolve(3))(state.tr)\n// );\n// ```\nexport const removeColumnClosestToPos = $pos => tr => {\n  const rect = findCellRectClosestToPos($pos);\n  if (rect) {\n    return removeColumnAt(rect.left)(setTextSelection($pos.pos)(tr));\n  }\n  return tr;\n};\n\n// :: ($pos: ResolvedPos) → (tr: Transaction) → Transaction\n// Returns a new transaction that removes a row closest to a given `$pos`.\n//\n// ```javascript\n// dispatch(\n//   removeRowClosestToPos(state.doc.resolve(3))(state.tr)\n// );\n// ```\nexport const removeRowClosestToPos = $pos => tr => {\n  const rect = findCellRectClosestToPos($pos);\n  if (rect) {\n    return removeRowAt(rect.top)(setTextSelection($pos.pos)(tr));\n  }\n  return tr;\n};\n\n// :: (columnIndex: number, cellTransform: (cell: {pos: number, start: number, node: ProseMirrorNode}, tr: Transaction) → Transaction, setCursorToLastCell: ?boolean) → (tr: Transaction) → Transaction\n// Returns a new transaction that maps a given `cellTransform` function to each cell in a column at a given `columnIndex`.\n// It will set the selection into the last cell of the column if `setCursorToLastCell` param is set to `true`.\n//\n// ```javascript\n// dispatch(\n//   forEachCellInColumn(0, (cell, tr) => emptyCell(cell, state.schema)(tr))(state.tr)\n// );\n// ```\nexport const forEachCellInColumn = (\n  columnIndex,\n  cellTransform,\n  setCursorToLastCell\n) => tr => {\n  const cells = getCellsInColumn(columnIndex)(tr.selection);\n  if (cells) {\n    for (let i = cells.length - 1; i >= 0; i--) {\n      tr = cellTransform(cells[i], tr);\n    }\n    if (setCursorToLastCell) {\n      const $pos = tr.doc.resolve(tr.mapping.map(cells[cells.length - 1].pos));\n      tr.setSelection(Selection.near($pos));\n    }\n    return cloneTr(tr);\n  }\n  return tr;\n};\n\n// :: (rowIndex: number, cellTransform: (cell: {pos: number, start: number, node: ProseMirrorNode}, tr: Transaction) → Transaction, setCursorToLastCell: ?boolean) → (tr: Transaction) → Transaction\n// Returns a new transaction that maps a given `cellTransform` function to each cell in a row at a given `rowIndex`.\n// It will set the selection into the last cell of the row if `setCursorToLastCell` param is set to `true`.\n//\n// ```javascript\n// dispatch(\n//   forEachCellInRow(0, (cell, tr) => setCellAttrs(cell, { background: 'red' })(tr))(state.tr)\n// );\n// ```\nexport const forEachCellInRow = (\n  rowIndex,\n  cellTransform,\n  setCursorToLastCell\n) => tr => {\n  const cells = getCellsInRow(rowIndex)(tr.selection);\n  if (cells) {\n    for (let i = cells.length - 1; i >= 0; i--) {\n      tr = cellTransform(cells[i], tr);\n    }\n    if (setCursorToLastCell) {\n      const $pos = tr.doc.resolve(tr.mapping.map(cells[cells.length - 1].pos));\n      tr.setSelection(Selection.near($pos));\n    }\n  }\n  return tr;\n};\n\n// :: (cell: {pos: number, start: number, node: ProseMirrorNode}, attrs: Object) → (tr: Transaction) → Transaction\n// Returns a new transaction that sets given `attrs` to a given `cell`.\n//\n// ```javascript\n// dispatch(\n//   setCellAttrs(findCellClosestToPos($pos), { background: 'blue' })(tr);\n// );\n// ```\nexport const setCellAttrs = (cell, attrs) => tr => {\n  if (cell) {\n    tr.setNodeMarkup(cell.pos, null, Object.assign({}, cell.node.attrs, attrs));\n    return cloneTr(tr);\n  }\n  return tr;\n};\n\n// :: (schema: Schema, rowsCount: ?number, colsCount: ?number, withHeaderRow: ?boolean, cellContent: ?Node) → Node\n// Returns a table node of a given size.\n// `withHeaderRow` defines whether the first row of the table will be a header row.\n// `cellContent` defines the content of each cell.\n//\n// ```javascript\n// const table = createTable(state.schema); // 3x3 table node\n// dispatch(\n//   tr.replaceSelectionWith(table).scrollIntoView()\n// );\n// ```\nexport const createTable = (\n  schema,\n  rowsCount = 3,\n  colsCount = 3,\n  withHeaderRow = true,\n  cellContent = null\n) => {\n  const {\n    cell: tableCell,\n    header_cell: tableHeader,\n    row: tableRow,\n    table\n  } = tableNodeTypes(schema);\n\n  const cells = [];\n  const headerCells = [];\n  for (let i = 0; i < colsCount; i++) {\n    cells.push(createCell(tableCell, cellContent));\n\n    if (withHeaderRow) {\n      headerCells.push(createCell(tableHeader, cellContent));\n    }\n  }\n\n  const rows = [];\n  for (let i = 0; i < rowsCount; i++) {\n    rows.push(\n      tableRow.createChecked(\n        null,\n        withHeaderRow && i === 0 ? headerCells : cells\n      )\n    );\n  }\n\n  return table.createChecked(null, rows);\n};\n\n// :: ($pos: ResolvedPos) → ?{pos: number, start: number, node: ProseMirrorNode}\n// Iterates over parent nodes, returning a table cell or a table header node closest to a given `$pos`.\n//\n// ```javascript\n// const cell = findCellClosestToPos(state.selection.$from);\n// ```\nexport const findCellClosestToPos = $pos => {\n  const predicate = node =>\n    node.type.spec.tableRole && /cell/i.test(node.type.spec.tableRole);\n  return findParentNodeClosestToPos($pos, predicate);\n};\n\n// :: ($pos: ResolvedPos) → ?{left: number, top: number, right: number, bottom: number}\n// Returns the rectangle spanning a cell closest to a given `$pos`.\n//\n// ```javascript\n// dispatch(\n//   findCellRectClosestToPos(state.selection.$from)\n// );\n// ```\nexport const findCellRectClosestToPos = $pos => {\n  const cell = findCellClosestToPos($pos);\n  if (cell) {\n    const table = findTableClosestToPos($pos);\n    const map = TableMap.get(table.node);\n    const cellPos = cell.pos - table.start;\n    return map.rectBetween(cellPos, cellPos);\n  }\n};\n\nconst filterCellsInRow = (rowIndex, predicate) => tr => {\n  let foundCells = [];\n  const cells = getCellsInRow(rowIndex)(tr.selection);\n  if (cells) {\n    for (let j = cells.length - 1; j >= 0; j--) {\n      if (predicate(cells[j], tr)) {\n        foundCells.push(cells[j]);\n      }\n    }\n  }\n\n  return foundCells;\n};\n\n// :: (columnIndex: number) → (tr: Transaction) → {$anchor: ResolvedPos, $head: ResolvedPos, indexes: [number]}\n// Returns a range of rectangular selection spanning all merged cells around a column at index `columnIndex`.\n//\n// ```javascript\n// const range = getSelectionRangeInColumn(3)(state.tr);\n// ```\nexport const getSelectionRangeInColumn = columnIndex => tr => {\n  let startIndex = columnIndex;\n  let endIndex = columnIndex;\n\n  // looking for selection start column (startIndex)\n  for (let i = columnIndex; i >= 0; i--) {\n    const cells = getCellsInColumn(i)(tr.selection);\n    if (cells) {\n      cells.forEach(cell => {\n        let maybeEndIndex = cell.node.attrs.colspan + i - 1;\n        if (maybeEndIndex >= startIndex) {\n          startIndex = i;\n        }\n        if (maybeEndIndex > endIndex) {\n          endIndex = maybeEndIndex;\n        }\n      });\n    }\n  }\n  // looking for selection end column (endIndex)\n  for (let i = columnIndex; i <= endIndex; i++) {\n    const cells = getCellsInColumn(i)(tr.selection);\n    if (cells) {\n      cells.forEach(cell => {\n        let maybeEndIndex = cell.node.attrs.colspan + i - 1;\n        if (cell.node.attrs.colspan > 1 && maybeEndIndex > endIndex) {\n          endIndex = maybeEndIndex;\n        }\n      });\n    }\n  }\n\n  // filter out columns without cells (where all rows have colspan > 1 in the same column)\n  const indexes = [];\n  for (let i = startIndex; i <= endIndex; i++) {\n    const maybeCells = getCellsInColumn(i)(tr.selection);\n    if (maybeCells && maybeCells.length) {\n      indexes.push(i);\n    }\n  }\n  startIndex = indexes[0];\n  endIndex = indexes[indexes.length - 1];\n\n  const firstSelectedColumnCells = getCellsInColumn(startIndex)(tr.selection);\n  const firstRowCells = getCellsInRow(0)(tr.selection);\n  const $anchor = tr.doc.resolve(\n    firstSelectedColumnCells[firstSelectedColumnCells.length - 1].pos\n  );\n\n  let headCell;\n  for (let i = endIndex; i >= startIndex; i--) {\n    const columnCells = getCellsInColumn(i)(tr.selection);\n    if (columnCells && columnCells.length) {\n      for (let j = firstRowCells.length - 1; j >= 0; j--) {\n        if (firstRowCells[j].pos === columnCells[0].pos) {\n          headCell = columnCells[0];\n          break;\n        }\n      }\n      if (headCell) {\n        break;\n      }\n    }\n  }\n\n  const $head = tr.doc.resolve(headCell.pos);\n  return { $anchor, $head, indexes };\n};\n\n// :: (rowIndex: number) → (tr: Transaction) → {$anchor: ResolvedPos, $head: ResolvedPos, indexes: [number]}\n// Returns a range of rectangular selection spanning all merged cells around a row at index `rowIndex`.\n//\n// ```javascript\n// const range = getSelectionRangeInRow(3)(state.tr);\n// ```\nexport const getSelectionRangeInRow = rowIndex => tr => {\n  let startIndex = rowIndex;\n  let endIndex = rowIndex;\n  // looking for selection start row (startIndex)\n  for (let i = rowIndex; i >= 0; i--) {\n    const cells = getCellsInRow(i)(tr.selection);\n    cells.forEach(cell => {\n      let maybeEndIndex = cell.node.attrs.rowspan + i - 1;\n      if (maybeEndIndex >= startIndex) {\n        startIndex = i;\n      }\n      if (maybeEndIndex > endIndex) {\n        endIndex = maybeEndIndex;\n      }\n    });\n  }\n  // looking for selection end row (endIndex)\n  for (let i = rowIndex; i <= endIndex; i++) {\n    const cells = getCellsInRow(i)(tr.selection);\n    cells.forEach(cell => {\n      let maybeEndIndex = cell.node.attrs.rowspan + i - 1;\n      if (cell.node.attrs.rowspan > 1 && maybeEndIndex > endIndex) {\n        endIndex = maybeEndIndex;\n      }\n    });\n  }\n\n  // filter out rows without cells (where all columns have rowspan > 1 in the same row)\n  const indexes = [];\n  for (let i = startIndex; i <= endIndex; i++) {\n    const maybeCells = getCellsInRow(i)(tr.selection);\n    if (maybeCells && maybeCells.length) {\n      indexes.push(i);\n    }\n  }\n  startIndex = indexes[0];\n  endIndex = indexes[indexes.length - 1];\n\n  const firstSelectedRowCells = getCellsInRow(startIndex)(tr.selection);\n  const firstColumnCells = getCellsInColumn(0)(tr.selection);\n  const $anchor = tr.doc.resolve(\n    firstSelectedRowCells[firstSelectedRowCells.length - 1].pos\n  );\n\n  let headCell;\n  for (let i = endIndex; i >= startIndex; i--) {\n    const rowCells = getCellsInRow(i)(tr.selection);\n    if (rowCells && rowCells.length) {\n      for (let j = firstColumnCells.length - 1; j >= 0; j--) {\n        if (firstColumnCells[j].pos === rowCells[0].pos) {\n          headCell = rowCells[0];\n          break;\n        }\n      }\n      if (headCell) {\n        break;\n      }\n    }\n  }\n\n  const $head = tr.doc.resolve(headCell.pos);\n  return { $anchor, $head, indexes };\n};\n","import {findWrapping, liftTarget, canSplit, ReplaceAroundStep} from \"prosemirror-transform\"\nimport {Slice, Fragment, NodeRange} from \"prosemirror-model\"\n\nconst olDOM = [\"ol\", 0], ulDOM = [\"ul\", 0], liDOM = [\"li\", 0]\n\n// :: NodeSpec\n// An ordered list [node spec](#model.NodeSpec). Has a single\n// attribute, `order`, which determines the number at which the list\n// starts counting, and defaults to 1. Represented as an `<ol>`\n// element.\nexport const orderedList = {\n  attrs: {order: {default: 1}},\n  parseDOM: [{tag: \"ol\", getAttrs(dom) {\n    return {order: dom.hasAttribute(\"start\") ? +dom.getAttribute(\"start\") : 1}\n  }}],\n  toDOM(node) {\n    return node.attrs.order == 1 ? olDOM : [\"ol\", {start: node.attrs.order}, 0]\n  }\n}\n\n// :: NodeSpec\n// A bullet list node spec, represented in the DOM as `<ul>`.\nexport const bulletList = {\n  parseDOM: [{tag: \"ul\"}],\n  toDOM() { return ulDOM }\n}\n\n// :: NodeSpec\n// A list item (`<li>`) spec.\nexport const listItem = {\n  parseDOM: [{tag: \"li\"}],\n  toDOM() { return liDOM },\n  defining: true\n}\n\nfunction add(obj, props) {\n  let copy = {}\n  for (let prop in obj) copy[prop] = obj[prop]\n  for (let prop in props) copy[prop] = props[prop]\n  return copy\n}\n\n// :: (OrderedMap<NodeSpec>, string, ?string) → OrderedMap<NodeSpec>\n// Convenience function for adding list-related node types to a map\n// specifying the nodes for a schema. Adds\n// [`orderedList`](#schema-list.orderedList) as `\"ordered_list\"`,\n// [`bulletList`](#schema-list.bulletList) as `\"bullet_list\"`, and\n// [`listItem`](#schema-list.listItem) as `\"list_item\"`.\n//\n// `itemContent` determines the content expression for the list items.\n// If you want the commands defined in this module to apply to your\n// list structure, it should have a shape like `\"paragraph block*\"` or\n// `\"paragraph (ordered_list | bullet_list)*\"`. `listGroup` can be\n// given to assign a group name to the list node types, for example\n// `\"block\"`.\nexport function addListNodes(nodes, itemContent, listGroup) {\n  return nodes.append({\n    ordered_list: add(orderedList, {content: \"list_item+\", group: listGroup}),\n    bullet_list: add(bulletList, {content: \"list_item+\", group: listGroup}),\n    list_item: add(listItem, {content: itemContent})\n  })\n}\n\n// :: (NodeType, ?Object) → (state: EditorState, dispatch: ?(tr: Transaction)) → bool\n// Returns a command function that wraps the selection in a list with\n// the given type an attributes. If `dispatch` is null, only return a\n// value to indicate whether this is possible, but don't actually\n// perform the change.\nexport function wrapInList(listType, attrs) {\n  return function(state, dispatch) {\n    let {$from, $to} = state.selection\n    let range = $from.blockRange($to), doJoin = false, outerRange = range\n    if (!range) return false\n    // This is at the top of an existing list item\n    if (range.depth >= 2 && $from.node(range.depth - 1).type.compatibleContent(listType) && range.startIndex == 0) {\n      // Don't do anything if this is the top of the list\n      if ($from.index(range.depth - 1) == 0) return false\n      let $insert = state.doc.resolve(range.start - 2)\n      outerRange = new NodeRange($insert, $insert, range.depth)\n      if (range.endIndex < range.parent.childCount)\n        range = new NodeRange($from, state.doc.resolve($to.end(range.depth)), range.depth)\n      doJoin = true\n    }\n    let wrap = findWrapping(outerRange, listType, attrs, range)\n    if (!wrap) return false\n    if (dispatch) dispatch(doWrapInList(state.tr, range, wrap, doJoin, listType).scrollIntoView())\n    return true\n  }\n}\n\nfunction doWrapInList(tr, range, wrappers, joinBefore, listType) {\n  let content = Fragment.empty\n  for (let i = wrappers.length - 1; i >= 0; i--)\n    content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content))\n\n  tr.step(new ReplaceAroundStep(range.start - (joinBefore ? 2 : 0), range.end, range.start, range.end,\n                                new Slice(content, 0, 0), wrappers.length, true))\n\n  let found = 0\n  for (let i = 0; i < wrappers.length; i++) if (wrappers[i].type == listType) found = i + 1\n  let splitDepth = wrappers.length - found\n\n  let splitPos = range.start + wrappers.length - (joinBefore ? 2 : 0), parent = range.parent\n  for (let i = range.startIndex, e = range.endIndex, first = true; i < e; i++, first = false) {\n    if (!first && canSplit(tr.doc, splitPos, splitDepth)) {\n      tr.split(splitPos, splitDepth)\n      splitPos += 2 * splitDepth\n    }\n    splitPos += parent.child(i).nodeSize\n  }\n  return tr\n}\n\n// :: (NodeType) → (state: EditorState, dispatch: ?(tr: Transaction)) → bool\n// Build a command that splits a non-empty textblock at the top level\n// of a list item by also splitting that list item.\nexport function splitListItem(itemType) {\n  return function(state, dispatch) {\n    let {$from, $to, node} = state.selection\n    if ((node && node.isBlock) || $from.depth < 2 || !$from.sameParent($to)) return false\n    let grandParent = $from.node(-1)\n    if (grandParent.type != itemType) return false\n    if ($from.parent.content.size == 0 && $from.node(-1).childCount == $from.indexAfter(-1)) {\n      // In an empty block. If this is a nested list, the wrapping\n      // list item should be split. Otherwise, bail out and let next\n      // command handle lifting.\n      if ($from.depth == 2 || $from.node(-3).type != itemType ||\n          $from.index(-2) != $from.node(-2).childCount - 1) return false\n      if (dispatch) {\n        let wrap = Fragment.empty, keepItem = $from.index(-1) > 0\n        // Build a fragment containing empty versions of the structure\n        // from the outer list item to the parent node of the cursor\n        for (let d = $from.depth - (keepItem ? 1 : 2); d >= $from.depth - 3; d--)\n          wrap = Fragment.from($from.node(d).copy(wrap))\n        // Add a second list item with an empty default start node\n        wrap = wrap.append(Fragment.from(itemType.createAndFill()))\n        let tr = state.tr.replace($from.before(keepItem ? null : -1), $from.after(-3), new Slice(wrap, keepItem ? 3 : 2, 2))\n        tr.setSelection(state.selection.constructor.near(tr.doc.resolve($from.pos + (keepItem ? 3 : 2))))\n        dispatch(tr.scrollIntoView())\n      }\n      return true\n    }\n    let nextType = $to.pos == $from.end() ? grandParent.contentMatchAt(0).defaultType : null\n    let tr = state.tr.delete($from.pos, $to.pos)\n    let types = nextType && [null, {type: nextType}]\n    if (!canSplit(tr.doc, $from.pos, 2, types)) return false\n    if (dispatch) dispatch(tr.split($from.pos, 2, types).scrollIntoView())\n    return true\n  }\n}\n\n// :: (NodeType) → (state: EditorState, dispatch: ?(tr: Transaction)) → bool\n// Create a command to lift the list item around the selection up into\n// a wrapping list.\nexport function liftListItem(itemType) {\n  return function(state, dispatch) {\n    let {$from, $to} = state.selection\n    let range = $from.blockRange($to, node => node.childCount && node.firstChild.type == itemType)\n    if (!range) return false\n    if (!dispatch) return true\n    if ($from.node(range.depth - 1).type == itemType) // Inside a parent list\n      return liftToOuterList(state, dispatch, itemType, range)\n    else // Outer list node\n      return liftOutOfList(state, dispatch, range)\n  }\n}\n\nfunction liftToOuterList(state, dispatch, itemType, range) {\n  let tr = state.tr, end = range.end, endOfList = range.$to.end(range.depth)\n  if (end < endOfList) {\n    // There are siblings after the lifted items, which must become\n    // children of the last item\n    tr.step(new ReplaceAroundStep(end - 1, endOfList, end, endOfList,\n                                  new Slice(Fragment.from(itemType.create(null, range.parent.copy())), 1, 0), 1, true))\n    range = new NodeRange(tr.doc.resolve(range.$from.pos), tr.doc.resolve(endOfList), range.depth)\n  }\n  dispatch(tr.lift(range, liftTarget(range)).scrollIntoView())\n  return true\n}\n\nfunction liftOutOfList(state, dispatch, range) {\n  let tr = state.tr, list = range.parent\n  // Merge the list items into a single big item\n  for (let pos = range.end, i = range.endIndex - 1, e = range.startIndex; i > e; i--) {\n    pos -= list.child(i).nodeSize\n    tr.delete(pos - 1, pos + 1)\n  }\n  let $start = tr.doc.resolve(range.start), item = $start.nodeAfter\n  let atStart = range.startIndex == 0, atEnd = range.endIndex == list.childCount\n  let parent = $start.node(-1), indexBefore = $start.index(-1)\n  if (!parent.canReplace(indexBefore + (atStart ? 0 : 1), indexBefore + 1,\n                         item.content.append(atEnd ? Fragment.empty : Fragment.from(list))))\n    return false\n  let start = $start.pos, end = start + item.nodeSize\n  // Strip off the surrounding list. At the sides where we're not at\n  // the end of the list, the existing list is closed. At sides where\n  // this is the end, it is overwritten to its end.\n  tr.step(new ReplaceAroundStep(start - (atStart ? 1 : 0), end + (atEnd ? 1 : 0), start + 1, end - 1,\n                                new Slice((atStart ? Fragment.empty : Fragment.from(list.copy(Fragment.empty)))\n                                          .append(atEnd ? Fragment.empty : Fragment.from(list.copy(Fragment.empty))),\n                                          atStart ? 0 : 1, atEnd ? 0 : 1), atStart ? 0 : 1))\n  dispatch(tr.scrollIntoView())\n  return true\n}\n\n// :: (NodeType) → (state: EditorState, dispatch: ?(tr: Transaction)) → bool\n// Create a command to sink the list item around the selection down\n// into an inner list.\nexport function sinkListItem(itemType) {\n  return function(state, dispatch) {\n    let {$from, $to} = state.selection\n    let range = $from.blockRange($to, node => node.childCount && node.firstChild.type == itemType)\n    if (!range) return false\n    let startIndex = range.startIndex\n    if (startIndex == 0) return false\n    let parent = range.parent, nodeBefore = parent.child(startIndex - 1)\n    if (nodeBefore.type != itemType) return false\n\n    if (dispatch) {\n      let nestedBefore = nodeBefore.lastChild && nodeBefore.lastChild.type == parent.type\n      let inner = Fragment.from(nestedBefore ? itemType.create() : null)\n      let slice = new Slice(Fragment.from(itemType.create(null, Fragment.from(parent.type.create(null, inner)))),\n                            nestedBefore ? 3 : 1, 0)\n      let before = range.start, after = range.end\n      dispatch(state.tr.step(new ReplaceAroundStep(before - (nestedBefore ? 3 : 1), after,\n                                                   before, after, slice, 1, true))\n               .scrollIntoView())\n    }\n    return true\n  }\n}\n","\n    /*!\n    * tiptap-commands v1.14.5\n    * (c) 2020 überdosis GbR (limited liability)\n    * @license MIT\n    */\n  \nimport { setBlockType, lift, wrapIn } from 'prosemirror-commands';\nexport { autoJoin, baseKeymap, chainCommands, createParagraphNear, deleteSelection, exitCode, joinBackward, joinDown, joinForward, joinUp, lift, liftEmptyBlock, macBaseKeymap, newlineInCode, pcBaseKeymap, selectAll, selectNodeBackward, selectNodeForward, selectParentNode, setBlockType, splitBlock, splitBlockKeepMarks, toggleMark, wrapIn } from 'prosemirror-commands';\nimport { liftListItem, wrapInList } from 'prosemirror-schema-list';\nexport { addListNodes, liftListItem, sinkListItem, splitListItem, wrapInList } from 'prosemirror-schema-list';\nimport { InputRule } from 'prosemirror-inputrules';\nexport { textblockTypeInputRule, wrappingInputRule } from 'prosemirror-inputrules';\nimport { Plugin } from 'prosemirror-state';\nimport { Slice, Fragment } from 'prosemirror-model';\nimport { getMarkRange, nodeIsActive } from 'tiptap-utils';\nimport { findParentNode } from 'prosemirror-utils';\n\nfunction insertText (text = '') {\n  return (state, dispatch) => {\n    const {\n      $from\n    } = state.selection;\n    const {\n      pos\n    } = $from.pos;\n    dispatch(state.tr.insertText(text, pos));\n    return true;\n  };\n}\n\nfunction getMarksBetween(start, end, state) {\n  let marks = [];\n  state.doc.nodesBetween(start, end, (node, pos) => {\n    marks = [...marks, ...node.marks.map(mark => ({\n      start: pos,\n      end: pos + node.nodeSize,\n      mark\n    }))];\n  });\n  return marks;\n}\n\nfunction markInputRule (regexp, markType, getAttrs) {\n  return new InputRule(regexp, (state, match, start, end) => {\n    const attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n    const {\n      tr\n    } = state;\n    const m = match.length - 1;\n    let markEnd = end;\n    let markStart = start;\n\n    if (match[m]) {\n      const matchStart = start + match[0].indexOf(match[m - 1]);\n      const matchEnd = matchStart + match[m - 1].length - 1;\n      const textStart = matchStart + match[m - 1].lastIndexOf(match[m]);\n      const textEnd = textStart + match[m].length;\n      const excludedMarks = getMarksBetween(start, end, state).filter(item => {\n        const {\n          excluded\n        } = item.mark.type;\n        return excluded.find(type => type.name === markType.name);\n      }).filter(item => item.end > matchStart);\n\n      if (excludedMarks.length) {\n        return false;\n      }\n\n      if (textEnd < matchEnd) {\n        tr.delete(textEnd, matchEnd);\n      }\n\n      if (textStart > matchStart) {\n        tr.delete(matchStart, textStart);\n      }\n\n      markStart = matchStart;\n      markEnd = markStart + match[m].length;\n    }\n\n    tr.addMark(markStart, markEnd, markType.create(attrs));\n    tr.removeStoredMark(markType);\n    return tr;\n  });\n}\n\nfunction nodeInputRule (regexp, type, getAttrs) {\n  return new InputRule(regexp, (state, match, start, end) => {\n    const attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n    const {\n      tr\n    } = state;\n\n    if (match[0]) {\n      tr.replaceWith(start - 1, end, type.create(attrs));\n    }\n\n    return tr;\n  });\n}\n\nfunction pasteRule (regexp, type, getAttrs) {\n  const handler = fragment => {\n    const nodes = [];\n    fragment.forEach(child => {\n      if (child.isText) {\n        const {\n          text\n        } = child;\n        let pos = 0;\n        let match;\n\n        do {\n          match = regexp.exec(text);\n\n          if (match) {\n            const start = match.index;\n            const end = start + match[0].length;\n            const attrs = getAttrs instanceof Function ? getAttrs(match[0]) : getAttrs;\n\n            if (start > 0) {\n              nodes.push(child.cut(pos, start));\n            }\n\n            nodes.push(child.cut(start, end).mark(type.create(attrs).addToSet(child.marks)));\n            pos = end;\n          }\n        } while (match);\n\n        if (pos < text.length) {\n          nodes.push(child.cut(pos));\n        }\n      } else {\n        nodes.push(child.copy(handler(child.content)));\n      }\n    });\n    return Fragment.fromArray(nodes);\n  };\n\n  return new Plugin({\n    props: {\n      transformPasted: slice => new Slice(handler(slice.content), slice.openStart, slice.openEnd)\n    }\n  });\n}\n\nfunction markPasteRule (regexp, type, getAttrs) {\n  const handler = (fragment, parent) => {\n    const nodes = [];\n    fragment.forEach(child => {\n      if (child.isText) {\n        const {\n          text,\n          marks\n        } = child;\n        let pos = 0;\n        let match;\n        const isLink = !!marks.filter(x => x.type.name === 'link')[0]; // eslint-disable-next-line\n\n        while (!isLink && (match = regexp.exec(text)) !== null) {\n          if (parent && parent.type.allowsMarkType(type) && match[1]) {\n            const start = match.index;\n            const end = start + match[0].length;\n            const textStart = start + match[0].indexOf(match[1]);\n            const textEnd = textStart + match[1].length;\n            const attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs; // adding text before markdown to nodes\n\n            if (start > 0) {\n              nodes.push(child.cut(pos, start));\n            } // adding the markdown part to nodes\n\n\n            nodes.push(child.cut(textStart, textEnd).mark(type.create(attrs).addToSet(child.marks)));\n            pos = end;\n          }\n        } // adding rest of text to nodes\n\n\n        if (pos < text.length) {\n          nodes.push(child.cut(pos));\n        }\n      } else {\n        nodes.push(child.copy(handler(child.content, child)));\n      }\n    });\n    return Fragment.fromArray(nodes);\n  };\n\n  return new Plugin({\n    props: {\n      transformPasted: slice => new Slice(handler(slice.content), slice.openStart, slice.openEnd)\n    }\n  });\n}\n\nfunction removeMark (type) {\n  return (state, dispatch) => {\n    const {\n      tr,\n      selection\n    } = state;\n    let {\n      from,\n      to\n    } = selection;\n    const {\n      $from,\n      empty\n    } = selection;\n\n    if (empty) {\n      const range = getMarkRange($from, type);\n      from = range.from;\n      to = range.to;\n    }\n\n    tr.removeMark(from, to, type);\n    return dispatch(tr);\n  };\n}\n\nfunction replaceText (range = null, type, attrs = {}) {\n  return (state, dispatch) => {\n    const {\n      $from,\n      $to\n    } = state.selection;\n    const index = $from.index();\n    const from = range ? range.from : $from.pos;\n    const to = range ? range.to : $to.pos;\n\n    if (!$from.parent.canReplaceWith(index, index, type)) {\n      return false;\n    }\n\n    if (dispatch) {\n      dispatch(state.tr.replaceWith(from, to, type.create(attrs)));\n    }\n\n    return true;\n  };\n}\n\nfunction setInlineBlockType (type, attrs = {}) {\n  return (state, dispatch) => {\n    const {\n      $from\n    } = state.selection;\n    const index = $from.index();\n\n    if (!$from.parent.canReplaceWith(index, index, type)) {\n      return false;\n    }\n\n    if (dispatch) {\n      dispatch(state.tr.replaceSelectionWith(type.create(attrs)));\n    }\n\n    return true;\n  };\n}\n\n// see https://github.com/ProseMirror/prosemirror-transform/blob/main/src/structure.js\n// Since this piece of code was \"borrowed\" from prosemirror, ESLint rules are ignored.\n\n/* eslint-disable max-len, no-plusplus, no-undef, eqeqeq */\n\nfunction canSplit(doc, pos, depth = 1, typesAfter) {\n  const $pos = doc.resolve(pos);\n  const base = $pos.depth - depth;\n  const innerType = typesAfter && typesAfter[typesAfter.length - 1] || $pos.parent;\n  if (base < 0 || $pos.parent.type.spec.isolating || !$pos.parent.canReplace($pos.index(), $pos.parent.childCount) || !innerType.type.validContent($pos.parent.content.cutByIndex($pos.index(), $pos.parent.childCount))) return false;\n\n  for (let d = $pos.depth - 1, i = depth - 2; d > base; d--, i--) {\n    const node = $pos.node(d);\n    const index = $pos.index(d);\n    if (node.type.spec.isolating) return false;\n    let rest = node.content.cutByIndex(index, node.childCount);\n    const after = typesAfter && typesAfter[i] || node;\n    if (after != node) rest = rest.replaceChild(0, after.type.create(after.attrs));\n    /* Change starts from here */\n    // if (!node.canReplace(index + 1, node.childCount) || !after.type.validContent(rest))\n    //   return false\n\n    if (!node.canReplace(index + 1, node.childCount)) return false;\n    /* Change ends here */\n  }\n\n  const index = $pos.indexAfter(base);\n  const baseType = typesAfter && typesAfter[0];\n  return $pos.node(base).canReplaceWith(index, index, baseType ? baseType.type : $pos.node(base + 1).type);\n} // this is a copy of splitListItem\n// see https://github.com/ProseMirror/prosemirror-schema-list/blob/main/src/schema-list.js\n\n\nfunction splitToDefaultListItem(itemType) {\n  return function (state, dispatch) {\n    const {\n      $from,\n      $to,\n      node\n    } = state.selection;\n    if (node && node.isBlock || $from.depth < 2 || !$from.sameParent($to)) return false;\n    const grandParent = $from.node(-1);\n    if (grandParent.type != itemType) return false;\n\n    if ($from.parent.content.size == 0) {\n      // In an empty block. If this is a nested list, the wrapping\n      // list item should be split. Otherwise, bail out and let next\n      // command handle lifting.\n      if ($from.depth == 2 || $from.node(-3).type != itemType || $from.index(-2) != $from.node(-2).childCount - 1) return false;\n\n      if (dispatch) {\n        let wrap = Fragment.empty;\n        const keepItem = $from.index(-1) > 0; // Build a fragment containing empty versions of the structure\n        // from the outer list item to the parent node of the cursor\n\n        for (let d = $from.depth - (keepItem ? 1 : 2); d >= $from.depth - 3; d--) wrap = Fragment.from($from.node(d).copy(wrap)); // Add a second list item with an empty default start node\n\n\n        wrap = wrap.append(Fragment.from(itemType.createAndFill()));\n        const tr = state.tr.replace($from.before(keepItem ? null : -1), $from.after(-3), new Slice(wrap, keepItem ? 3 : 2, 2));\n        tr.setSelection(state.selection.constructor.near(tr.doc.resolve($from.pos + (keepItem ? 3 : 2))));\n        dispatch(tr.scrollIntoView());\n      }\n\n      return true;\n    }\n\n    const nextType = $to.pos == $from.end() ? grandParent.contentMatchAt($from.indexAfter(-1)).defaultType : null;\n    const tr = state.tr.delete($from.pos, $to.pos);\n    /* Change starts from here */\n    // let types = nextType && [null, {type: nextType}]\n\n    let types = nextType && [{\n      type: itemType\n    }, {\n      type: nextType\n    }];\n    if (!types) types = [{\n      type: itemType\n    }, null];\n    /* Change ends here */\n\n    if (!canSplit(tr.doc, $from.pos, 2, types)) return false;\n    if (dispatch) dispatch(tr.split($from.pos, 2, types).scrollIntoView());\n    return true;\n  };\n}\n/* eslint-enable max-len, no-plusplus, no-undef, eqeqeq */\n\nfunction toggleBlockType (type, toggletype, attrs = {}) {\n  return (state, dispatch, view) => {\n    const isActive = nodeIsActive(state, type, attrs);\n\n    if (isActive) {\n      return setBlockType(toggletype)(state, dispatch, view);\n    }\n\n    return setBlockType(type, attrs)(state, dispatch, view);\n  };\n}\n\nfunction isList(node, schema) {\n  return node.type === schema.nodes.bullet_list || node.type === schema.nodes.ordered_list || node.type === schema.nodes.todo_list;\n}\n\nfunction toggleList(listType, itemType) {\n  return (state, dispatch, view) => {\n    const {\n      schema,\n      selection\n    } = state;\n    const {\n      $from,\n      $to\n    } = selection;\n    const range = $from.blockRange($to);\n\n    if (!range) {\n      return false;\n    }\n\n    const parentList = findParentNode(node => isList(node, schema))(selection);\n\n    if (range.depth >= 1 && parentList && range.depth - parentList.depth <= 1) {\n      if (parentList.node.type === listType) {\n        return liftListItem(itemType)(state, dispatch, view);\n      }\n\n      if (isList(parentList.node, schema) && listType.validContent(parentList.node.content)) {\n        const {\n          tr\n        } = state;\n        tr.setNodeMarkup(parentList.pos, listType);\n\n        if (dispatch) {\n          dispatch(tr);\n        }\n\n        return false;\n      }\n    }\n\n    return wrapInList(listType)(state, dispatch, view);\n  };\n}\n\nfunction toggleWrap (type, attrs = {}) {\n  return (state, dispatch, view) => {\n    const isActive = nodeIsActive(state, type, attrs);\n\n    if (isActive) {\n      return lift(state, dispatch);\n    }\n\n    return wrapIn(type, attrs)(state, dispatch, view);\n  };\n}\n\nfunction updateMark (type, attrs) {\n  return (state, dispatch) => {\n    const {\n      tr,\n      selection,\n      doc\n    } = state;\n    let {\n      from,\n      to\n    } = selection;\n    const {\n      $from,\n      empty\n    } = selection;\n\n    if (empty) {\n      const range = getMarkRange($from, type);\n      from = range.from;\n      to = range.to;\n    }\n\n    const hasMark = doc.rangeHasMark(from, to, type);\n\n    if (hasMark) {\n      tr.removeMark(from, to, type);\n    }\n\n    tr.addMark(from, to, type.create(attrs));\n    return dispatch(tr);\n  };\n}\n\nexport { insertText, markInputRule, markPasteRule, nodeInputRule, pasteRule, removeMark, replaceText, setInlineBlockType, splitToDefaultListItem, toggleBlockType, toggleList, toggleWrap, updateMark };\n","import {Plugin, PluginKey, TextSelection} from \"prosemirror-state\"\n\nclass Rebaseable {\n  constructor(step, inverted, origin) {\n    this.step = step\n    this.inverted = inverted\n    this.origin = origin\n  }\n}\n\n// : ([Rebaseable], [Step], Transform) → [Rebaseable]\n// Undo a given set of steps, apply a set of other steps, and then\n// redo them.\nexport function rebaseSteps(steps, over, transform) {\n  for (let i = steps.length - 1; i >= 0; i--) transform.step(steps[i].inverted)\n  for (let i = 0; i < over.length; i++) transform.step(over[i])\n  let result = []\n  for (let i = 0, mapFrom = steps.length; i < steps.length; i++) {\n    let mapped = steps[i].step.map(transform.mapping.slice(mapFrom))\n    mapFrom--\n    if (mapped && !transform.maybeStep(mapped).failed) {\n      transform.mapping.setMirror(mapFrom, transform.steps.length - 1)\n      result.push(new Rebaseable(mapped, mapped.invert(transform.docs[transform.docs.length - 1]), steps[i].origin))\n    }\n  }\n  return result\n}\n\n// This state field accumulates changes that have to be sent to the\n// central authority in the collaborating group and makes it possible\n// to integrate changes made by peers into our local document. It is\n// defined by the plugin, and will be available as the `collab` field\n// in the resulting editor state.\nclass CollabState {\n  constructor(version, unconfirmed) {\n    // : number\n    // The version number of the last update received from the central\n    // authority. Starts at 0 or the value of the `version` property\n    // in the option object, for the editor's value when the option\n    // was enabled.\n    this.version = version\n\n    // : [Rebaseable]\n    // The local steps that havent been successfully sent to the\n    // server yet.\n    this.unconfirmed = unconfirmed\n  }\n}\n\nfunction unconfirmedFrom(transform) {\n  let result = []\n  for (let i = 0; i < transform.steps.length; i++)\n    result.push(new Rebaseable(transform.steps[i],\n                               transform.steps[i].invert(transform.docs[i]),\n                               transform))\n  return result\n}\n\nconst collabKey = new PluginKey(\"collab\")\n\n// :: (?Object) → Plugin\n//\n// Creates a plugin that enables the collaborative editing framework\n// for the editor.\n//\n//   config::- An optional set of options\n//\n//     version:: ?number\n//     The starting version number of the collaborative editing.\n//     Defaults to 0.\n//\n//     clientID:: ?union<number, string>\n//     This client's ID, used to distinguish its changes from those of\n//     other clients. Defaults to a random 32-bit number.\nexport function collab(config = {}) {\n  config = {version: config.version || 0,\n            clientID: config.clientID == null ? Math.floor(Math.random() * 0xFFFFFFFF) : config.clientID}\n\n  return new Plugin({\n    key: collabKey,\n\n    state: {\n      init: () => new CollabState(config.version, []),\n      apply(tr, collab) {\n        let newState = tr.getMeta(collabKey)\n        if (newState)\n          return newState\n        if (tr.docChanged)\n          return new CollabState(collab.version, collab.unconfirmed.concat(unconfirmedFrom(tr)))\n        return collab\n      }\n    },\n\n    config,\n    // This is used to notify the history plugin to not merge steps,\n    // so that the history can be rebased.\n    historyPreserveItems: true\n  })\n}\n\n// :: (state: EditorState, steps: [Step], clientIDs: [union<number, string>], options: ?Object) → Transaction\n// Create a transaction that represents a set of new steps received from\n// the authority. Applying this transaction moves the state forward to\n// adjust to the authority's view of the document.\n//\n//   options::- Additional options.\n//\n//     mapSelectionBackward:: ?boolean\n//     When enabled (the default is `false`), if the current selection\n//     is a [text selection](#state.TextSelection), its sides are\n//     mapped with a negative bias for this transaction, so that\n//     content inserted at the cursor ends up after the cursor. Users\n//     usually prefer this, but it isn't done by default for reasons\n//     of backwards compatibility.\nexport function receiveTransaction(state, steps, clientIDs, options) {\n  // Pushes a set of steps (received from the central authority) into\n  // the editor state (which should have the collab plugin enabled).\n  // Will recognize its own changes, and confirm unconfirmed steps as\n  // appropriate. Remaining unconfirmed steps will be rebased over\n  // remote steps.\n  let collabState = collabKey.getState(state)\n  let version = collabState.version + steps.length\n  let ourID = collabKey.get(state).spec.config.clientID\n\n  // Find out which prefix of the steps originated with us\n  let ours = 0\n  while (ours < clientIDs.length && clientIDs[ours] == ourID) ++ours\n  let unconfirmed = collabState.unconfirmed.slice(ours)\n  steps = ours ? steps.slice(ours) : steps\n\n  // If all steps originated with us, we're done.\n  if (!steps.length)\n    return state.tr.setMeta(collabKey, new CollabState(version, unconfirmed))\n\n  let nUnconfirmed = unconfirmed.length\n  let tr = state.tr\n  if (nUnconfirmed) {\n    unconfirmed = rebaseSteps(unconfirmed, steps, tr)\n  } else {\n    for (let i = 0; i < steps.length; i++) tr.step(steps[i])\n    unconfirmed = []\n  }\n\n  let newCollabState = new CollabState(version, unconfirmed)\n  if (options && options.mapSelectionBackward && state.selection instanceof TextSelection) {\n    tr.setSelection(TextSelection.between(tr.doc.resolve(tr.mapping.map(state.selection.anchor, -1)),\n                                          tr.doc.resolve(tr.mapping.map(state.selection.head, -1)), -1))\n    tr.updated &= ~1\n  }\n  return tr.setMeta(\"rebased\", nUnconfirmed).setMeta(\"addToHistory\", false).setMeta(collabKey, newCollabState)\n}\n\n// :: (state: EditorState) → ?{version: number, steps: [Step], clientID: union<number, string>, origins: [Transaction]}\n// Provides data describing the editor's unconfirmed steps, which need\n// to be sent to the central authority. Returns null when there is\n// nothing to send.\n//\n// `origins` holds the _original_ transactions that produced each\n// steps. This can be useful for looking up time stamps and other\n// metadata for the steps, but note that the steps may have been\n// rebased, whereas the origin transactions are still the old,\n// unchanged objects.\nexport function sendableSteps(state) {\n  let collabState = collabKey.getState(state)\n  if (collabState.unconfirmed.length == 0) return null\n  return {\n    version: collabState.version,\n    steps: collabState.unconfirmed.map(s => s.step),\n    clientID: collabKey.get(state).spec.config.clientID,\n    get origins() { return this._origins || (this._origins = collabState.unconfirmed.map(s => s.origin)) }\n  }\n}\n\n// :: (EditorState) → number\n// Get the version up to which the collab plugin has synced with the\n// central authority.\nexport function getVersion(state) {\n  return collabKey.getState(state).version\n}\n","module.exports=/[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4E\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDF55-\\uDF59]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/","/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n'use strict';\n\n\n/**\n * new Ruler()\n **/\nfunction Ruler() {\n  // List of added rules. Each element is:\n  //\n  // {\n  //   name: XXX,\n  //   enabled: Boolean,\n  //   fn: Function(),\n  //   alt: [ name2, name3 ]\n  // }\n  //\n  this.__rules__ = [];\n\n  // Cached rule chains.\n  //\n  // First level - chain name, '' for default.\n  // Second level - diginal anchor for fast filtering by charcodes.\n  //\n  this.__cache__ = null;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Helper methods, should not be used directly\n\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n  for (var i = 0; i < this.__rules__.length; i++) {\n    if (this.__rules__[i].name === name) {\n      return i;\n    }\n  }\n  return -1;\n};\n\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n  var self = this;\n  var chains = [ '' ];\n\n  // collect unique names\n  self.__rules__.forEach(function (rule) {\n    if (!rule.enabled) { return; }\n\n    rule.alt.forEach(function (altName) {\n      if (chains.indexOf(altName) < 0) {\n        chains.push(altName);\n      }\n    });\n  });\n\n  self.__cache__ = {};\n\n  chains.forEach(function (chain) {\n    self.__cache__[chain] = [];\n    self.__rules__.forEach(function (rule) {\n      if (!rule.enabled) { return; }\n\n      if (chain && rule.alt.indexOf(chain) < 0) { return; }\n\n      self.__cache__[chain].push(rule.fn);\n    });\n  });\n};\n\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n  var index = this.__find__(name);\n  var opt = options || {};\n\n  if (index === -1) { throw new Error('Parser rule not found: ' + name); }\n\n  this.__rules__[index].fn = fn;\n  this.__rules__[index].alt = opt.alt || [];\n  this.__cache__ = null;\n};\n\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n  var index = this.__find__(beforeName);\n  var opt = options || {};\n\n  if (index === -1) { throw new Error('Parser rule not found: ' + beforeName); }\n\n  this.__rules__.splice(index, 0, {\n    name: ruleName,\n    enabled: true,\n    fn: fn,\n    alt: opt.alt || []\n  });\n\n  this.__cache__ = null;\n};\n\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n  var index = this.__find__(afterName);\n  var opt = options || {};\n\n  if (index === -1) { throw new Error('Parser rule not found: ' + afterName); }\n\n  this.__rules__.splice(index + 1, 0, {\n    name: ruleName,\n    enabled: true,\n    fn: fn,\n    alt: opt.alt || []\n  });\n\n  this.__cache__ = null;\n};\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n  var opt = options || {};\n\n  this.__rules__.push({\n    name: ruleName,\n    enabled: true,\n    fn: fn,\n    alt: opt.alt || []\n  });\n\n  this.__cache__ = null;\n};\n\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) { list = [ list ]; }\n\n  var result = [];\n\n  // Search by name and enable\n  list.forEach(function (name) {\n    var idx = this.__find__(name);\n\n    if (idx < 0) {\n      if (ignoreInvalid) { return; }\n      throw new Error('Rules manager: invalid rule name ' + name);\n    }\n    this.__rules__[idx].enabled = true;\n    result.push(name);\n  }, this);\n\n  this.__cache__ = null;\n  return result;\n};\n\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) { list = [ list ]; }\n\n  this.__rules__.forEach(function (rule) { rule.enabled = false; });\n\n  this.enable(list, ignoreInvalid);\n};\n\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) { list = [ list ]; }\n\n  var result = [];\n\n  // Search by name and disable\n  list.forEach(function (name) {\n    var idx = this.__find__(name);\n\n    if (idx < 0) {\n      if (ignoreInvalid) { return; }\n      throw new Error('Rules manager: invalid rule name ' + name);\n    }\n    this.__rules__[idx].enabled = false;\n    result.push(name);\n  }, this);\n\n  this.__cache__ = null;\n  return result;\n};\n\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n  if (this.__cache__ === null) {\n    this.__compile__();\n  }\n\n  // Chain can be empty, if rules disabled. But we still have to return Array.\n  return this.__cache__[chainName] || [];\n};\n\nmodule.exports = Ruler;\n","// Token class\n\n'use strict';\n\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token(type, tag, nesting) {\n  /**\n   * Token#type -> String\n   *\n   * Type of the token (string, e.g. \"paragraph_open\")\n   **/\n  this.type     = type;\n\n  /**\n   * Token#tag -> String\n   *\n   * html tag name, e.g. \"p\"\n   **/\n  this.tag      = tag;\n\n  /**\n   * Token#attrs -> Array\n   *\n   * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n   **/\n  this.attrs    = null;\n\n  /**\n   * Token#map -> Array\n   *\n   * Source map info. Format: `[ line_begin, line_end ]`\n   **/\n  this.map      = null;\n\n  /**\n   * Token#nesting -> Number\n   *\n   * Level change (number in {-1, 0, 1} set), where:\n   *\n   * -  `1` means the tag is opening\n   * -  `0` means the tag is self-closing\n   * - `-1` means the tag is closing\n   **/\n  this.nesting  = nesting;\n\n  /**\n   * Token#level -> Number\n   *\n   * nesting level, the same as `state.level`\n   **/\n  this.level    = 0;\n\n  /**\n   * Token#children -> Array\n   *\n   * An array of child nodes (inline and img tokens)\n   **/\n  this.children = null;\n\n  /**\n   * Token#content -> String\n   *\n   * In a case of self-closing tag (code, html, fence, etc.),\n   * it has contents of this tag.\n   **/\n  this.content  = '';\n\n  /**\n   * Token#markup -> String\n   *\n   * '*' or '_' for emphasis, fence string for fence, etc.\n   **/\n  this.markup   = '';\n\n  /**\n   * Token#info -> String\n   *\n   * fence infostring\n   **/\n  this.info     = '';\n\n  /**\n   * Token#meta -> Object\n   *\n   * A place for plugins to store an arbitrary data\n   **/\n  this.meta     = null;\n\n  /**\n   * Token#block -> Boolean\n   *\n   * True for block-level tokens, false for inline tokens.\n   * Used in renderer to calculate line breaks\n   **/\n  this.block    = false;\n\n  /**\n   * Token#hidden -> Boolean\n   *\n   * If it's true, ignore this element when rendering. Used for tight lists\n   * to hide paragraphs.\n   **/\n  this.hidden   = false;\n}\n\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex(name) {\n  var attrs, i, len;\n\n  if (!this.attrs) { return -1; }\n\n  attrs = this.attrs;\n\n  for (i = 0, len = attrs.length; i < len; i++) {\n    if (attrs[i][0] === name) { return i; }\n  }\n  return -1;\n};\n\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush(attrData) {\n  if (this.attrs) {\n    this.attrs.push(attrData);\n  } else {\n    this.attrs = [ attrData ];\n  }\n};\n\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet(name, value) {\n  var idx = this.attrIndex(name),\n      attrData = [ name, value ];\n\n  if (idx < 0) {\n    this.attrPush(attrData);\n  } else {\n    this.attrs[idx] = attrData;\n  }\n};\n\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet(name) {\n  var idx = this.attrIndex(name), value = null;\n  if (idx >= 0) {\n    value = this.attrs[idx][1];\n  }\n  return value;\n};\n\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin(name, value) {\n  var idx = this.attrIndex(name);\n\n  if (idx < 0) {\n    this.attrPush([ name, value ]);\n  } else {\n    this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value;\n  }\n};\n\n\nmodule.exports = Token;\n","export var base = {\n  8: \"Backspace\",\n  9: \"Tab\",\n  10: \"Enter\",\n  12: \"NumLock\",\n  13: \"Enter\",\n  16: \"Shift\",\n  17: \"Control\",\n  18: \"Alt\",\n  20: \"CapsLock\",\n  27: \"Escape\",\n  32: \" \",\n  33: \"PageUp\",\n  34: \"PageDown\",\n  35: \"End\",\n  36: \"Home\",\n  37: \"ArrowLeft\",\n  38: \"ArrowUp\",\n  39: \"ArrowRight\",\n  40: \"ArrowDown\",\n  44: \"PrintScreen\",\n  45: \"Insert\",\n  46: \"Delete\",\n  59: \";\",\n  61: \"=\",\n  91: \"Meta\",\n  92: \"Meta\",\n  106: \"*\",\n  107: \"+\",\n  108: \",\",\n  109: \"-\",\n  110: \".\",\n  111: \"/\",\n  144: \"NumLock\",\n  145: \"ScrollLock\",\n  160: \"Shift\",\n  161: \"Shift\",\n  162: \"Control\",\n  163: \"Control\",\n  164: \"Alt\",\n  165: \"Alt\",\n  173: \"-\",\n  186: \";\",\n  187: \"=\",\n  188: \",\",\n  189: \"-\",\n  190: \".\",\n  191: \"/\",\n  192: \"`\",\n  219: \"[\",\n  220: \"\\\\\",\n  221: \"]\",\n  222: \"'\",\n  229: \"q\"\n}\n\nexport var shift = {\n  48: \")\",\n  49: \"!\",\n  50: \"@\",\n  51: \"#\",\n  52: \"$\",\n  53: \"%\",\n  54: \"^\",\n  55: \"&\",\n  56: \"*\",\n  57: \"(\",\n  59: \":\",\n  61: \"+\",\n  173: \"_\",\n  186: \":\",\n  187: \"+\",\n  188: \"<\",\n  189: \"_\",\n  190: \">\",\n  191: \"?\",\n  192: \"~\",\n  219: \"{\",\n  220: \"|\",\n  221: \"}\",\n  222: \"\\\"\",\n  229: \"Q\"\n}\n\nvar chrome = typeof navigator != \"undefined\" && /Chrome\\/(\\d+)/.exec(navigator.userAgent)\nvar safari = typeof navigator != \"undefined\" && /Apple Computer/.test(navigator.vendor)\nvar gecko = typeof navigator != \"undefined\" && /Gecko\\/\\d+/.test(navigator.userAgent)\nvar mac = typeof navigator != \"undefined\" && /Mac/.test(navigator.platform)\nvar ie = typeof navigator != \"undefined\" && /MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent)\nvar brokenModifierNames = chrome && (mac || +chrome[1] < 57) || gecko && mac\n\n// Fill in the digit keys\nfor (var i = 0; i < 10; i++) base[48 + i] = base[96 + i] = String(i)\n\n// The function keys\nfor (var i = 1; i <= 24; i++) base[i + 111] = \"F\" + i\n\n// And the alphabetic keys\nfor (var i = 65; i <= 90; i++) {\n  base[i] = String.fromCharCode(i + 32)\n  shift[i] = String.fromCharCode(i)\n}\n\n// For each code that doesn't have a shift-equivalent, copy the base name\nfor (var code in base) if (!shift.hasOwnProperty(code)) shift[code] = base[code]\n\nexport function keyName(event) {\n  // Don't trust event.key in Chrome when there are modifiers until\n  // they fix https://bugs.chromium.org/p/chromium/issues/detail?id=633838\n  var ignoreKey = brokenModifierNames && (event.ctrlKey || event.altKey || event.metaKey) ||\n    (safari || ie) && event.shiftKey && event.key && event.key.length == 1\n  var name = (!ignoreKey && event.key) ||\n    (event.shiftKey ? shift : base)[event.keyCode] ||\n    event.key || \"Unidentified\"\n  // Edge sometimes produces wrong names (Issue #3)\n  if (name == \"Esc\") name = \"Escape\"\n  if (name == \"Del\") name = \"Delete\"\n  // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8860571/\n  if (name == \"Left\") name = \"ArrowLeft\"\n  if (name == \"Up\") name = \"ArrowUp\"\n  if (name == \"Right\") name = \"ArrowRight\"\n  if (name == \"Down\") name = \"ArrowDown\"\n  return name\n}\n","import {base, keyName} from \"w3c-keyname\"\nimport {Plugin} from \"prosemirror-state\"\n\n// declare global: navigator\n\nconst mac = typeof navigator != \"undefined\" ? /Mac/.test(navigator.platform) : false\n\nfunction normalizeKeyName(name) {\n  let parts = name.split(/-(?!$)/), result = parts[parts.length - 1]\n  if (result == \"Space\") result = \" \"\n  let alt, ctrl, shift, meta\n  for (let i = 0; i < parts.length - 1; i++) {\n    let mod = parts[i]\n    if (/^(cmd|meta|m)$/i.test(mod)) meta = true\n    else if (/^a(lt)?$/i.test(mod)) alt = true\n    else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true\n    else if (/^s(hift)?$/i.test(mod)) shift = true\n    else if (/^mod$/i.test(mod)) { if (mac) meta = true; else ctrl = true }\n    else throw new Error(\"Unrecognized modifier name: \" + mod)\n  }\n  if (alt) result = \"Alt-\" + result\n  if (ctrl) result = \"Ctrl-\" + result\n  if (meta) result = \"Meta-\" + result\n  if (shift) result = \"Shift-\" + result\n  return result\n}\n\nfunction normalize(map) {\n  let copy = Object.create(null)\n  for (let prop in map) copy[normalizeKeyName(prop)] = map[prop]\n  return copy\n}\n\nfunction modifiers(name, event, shift) {\n  if (event.altKey) name = \"Alt-\" + name\n  if (event.ctrlKey) name = \"Ctrl-\" + name\n  if (event.metaKey) name = \"Meta-\" + name\n  if (shift !== false && event.shiftKey) name = \"Shift-\" + name\n  return name\n}\n\n// :: (Object) → Plugin\n// Create a keymap plugin for the given set of bindings.\n//\n// Bindings should map key names to [command](#commands)-style\n// functions, which will be called with `(EditorState, dispatch,\n// EditorView)` arguments, and should return true when they've handled\n// the key. Note that the view argument isn't part of the command\n// protocol, but can be used as an escape hatch if a binding needs to\n// directly interact with the UI.\n//\n// Key names may be strings like `\"Shift-Ctrl-Enter\"`—a key\n// identifier prefixed with zero or more modifiers. Key identifiers\n// are based on the strings that can appear in\n// [`KeyEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key).\n// Use lowercase letters to refer to letter keys (or uppercase letters\n// if you want shift to be held). You may use `\"Space\"` as an alias\n// for the `\" \"` name.\n//\n// Modifiers can be given in any order. `Shift-` (or `s-`), `Alt-` (or\n// `a-`), `Ctrl-` (or `c-` or `Control-`) and `Cmd-` (or `m-` or\n// `Meta-`) are recognized. For characters that are created by holding\n// shift, the `Shift-` prefix is implied, and should not be added\n// explicitly.\n//\n// You can use `Mod-` as a shorthand for `Cmd-` on Mac and `Ctrl-` on\n// other platforms.\n//\n// You can add multiple keymap plugins to an editor. The order in\n// which they appear determines their precedence (the ones early in\n// the array get to dispatch first).\nexport function keymap(bindings) {\n  return new Plugin({props: {handleKeyDown: keydownHandler(bindings)}})\n}\n\n// :: (Object) → (view: EditorView, event: dom.Event) → bool\n// Given a set of bindings (using the same format as\n// [`keymap`](#keymap.keymap), return a [keydown\n// handler](#view.EditorProps.handleKeyDown) that handles them.\nexport function keydownHandler(bindings) {\n  let map = normalize(bindings)\n  return function(view, event) {\n    let name = keyName(event), isChar = name.length == 1 && name != \" \", baseName\n    let direct = map[modifiers(name, event, !isChar)]\n    if (direct && direct(view.state, view.dispatch, view)) return true\n    if (isChar && (event.shiftKey || event.altKey || event.metaKey || name.charCodeAt(0) > 127) &&\n        (baseName = base[event.keyCode]) && baseName != name) {\n      // Try falling back to the keyCode when there's a modifier\n      // active or the character produced isn't ASCII, and our table\n      // produces a different name from the the keyCode. See #668,\n      // #1060\n      let fromCode = map[modifiers(baseName, event, true)]\n      if (fromCode && fromCode(view.state, view.dispatch, view)) return true\n    } else if (isChar && event.shiftKey) {\n      // Otherwise, if shift is active, also try the binding with the\n      // Shift- prefix enabled. See #997\n      let withShift = map[modifiers(name, event, true)]\n      if (withShift && withShift(view.state, view.dispatch, view)) return true\n    }\n    return false\n  }\n}\n","/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param  {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n  var str = '' + string;\n  var match = matchHtmlRegExp.exec(str);\n\n  if (!match) {\n    return str;\n  }\n\n  var escape;\n  var html = '';\n  var index = 0;\n  var lastIndex = 0;\n\n  for (index = match.index; index < str.length; index++) {\n    switch (str.charCodeAt(index)) {\n      case 34: // \"\n        escape = '&quot;';\n        break;\n      case 38: // &\n        escape = '&amp;';\n        break;\n      case 39: // '\n        escape = '&#39;';\n        break;\n      case 60: // <\n        escape = '&lt;';\n        break;\n      case 62: // >\n        escape = '&gt;';\n        break;\n      default:\n        continue;\n    }\n\n    if (lastIndex !== index) {\n      html += str.substring(lastIndex, index);\n    }\n\n    lastIndex = index + 1;\n    html += escape;\n  }\n\n  return lastIndex !== index\n    ? html + str.substring(lastIndex, index)\n    : html;\n}\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var af = moment.defineLocale('af', {\n        months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),\n        weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n        weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n        meridiemParse: /vm|nm/i,\n        isPM : function (input) {\n            return /^nm$/i.test(input);\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'vm' : 'VM';\n            } else {\n                return isLower ? 'nm' : 'NM';\n            }\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Vandag om] LT',\n            nextDay : '[Môre om] LT',\n            nextWeek : 'dddd [om] LT',\n            lastDay : '[Gister om] LT',\n            lastWeek : '[Laas] dddd [om] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'oor %s',\n            past : '%s gelede',\n            s : '\\'n paar sekondes',\n            ss : '%d sekondes',\n            m : '\\'n minuut',\n            mm : '%d minute',\n            h : '\\'n uur',\n            hh : '%d ure',\n            d : '\\'n dag',\n            dd : '%d dae',\n            M : '\\'n maand',\n            MM : '%d maande',\n            y : '\\'n jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter\n        },\n        week : {\n            dow : 1, // Maandag is die eerste dag van die week.\n            doy : 4  // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n        }\n    });\n\n    return af;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '١',\n        '2': '٢',\n        '3': '٣',\n        '4': '٤',\n        '5': '٥',\n        '6': '٦',\n        '7': '٧',\n        '8': '٨',\n        '9': '٩',\n        '0': '٠'\n    }, numberMap = {\n        '١': '1',\n        '٢': '2',\n        '٣': '3',\n        '٤': '4',\n        '٥': '5',\n        '٦': '6',\n        '٧': '7',\n        '٨': '8',\n        '٩': '9',\n        '٠': '0'\n    }, pluralForm = function (n) {\n        return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n    }, plurals = {\n        s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n        m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n        h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n        d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n        M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n        y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n    }, pluralize = function (u) {\n        return function (number, withoutSuffix, string, isFuture) {\n            var f = pluralForm(number),\n                str = plurals[u][pluralForm(number)];\n            if (f === 2) {\n                str = str[withoutSuffix ? 0 : 1];\n            }\n            return str.replace(/%d/i, number);\n        };\n    }, months = [\n        'يناير',\n        'فبراير',\n        'مارس',\n        'أبريل',\n        'مايو',\n        'يونيو',\n        'يوليو',\n        'أغسطس',\n        'سبتمبر',\n        'أكتوبر',\n        'نوفمبر',\n        'ديسمبر'\n    ];\n\n    var ar = moment.defineLocale('ar', {\n        months : months,\n        monthsShort : months,\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/\\u200FM/\\u200FYYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'بعد %s',\n            past : 'منذ %s',\n            s : pluralize('s'),\n            ss : pluralize('s'),\n            m : pluralize('m'),\n            mm : pluralize('m'),\n            h : pluralize('h'),\n            hh : pluralize('h'),\n            d : pluralize('d'),\n            dd : pluralize('d'),\n            M : pluralize('M'),\n            MM : pluralize('M'),\n            y : pluralize('y'),\n            yy : pluralize('y')\n        },\n        preparse: function (string) {\n            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return ar;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var arDz = moment.defineLocale('ar-dz', {\n        months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return arDz;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var arKw = moment.defineLocale('ar-kw', {\n        months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return arKw;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '1',\n        '2': '2',\n        '3': '3',\n        '4': '4',\n        '5': '5',\n        '6': '6',\n        '7': '7',\n        '8': '8',\n        '9': '9',\n        '0': '0'\n    }, pluralForm = function (n) {\n        return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n    }, plurals = {\n        s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n        m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n        h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n        d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n        M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n        y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n    }, pluralize = function (u) {\n        return function (number, withoutSuffix, string, isFuture) {\n            var f = pluralForm(number),\n                str = plurals[u][pluralForm(number)];\n            if (f === 2) {\n                str = str[withoutSuffix ? 0 : 1];\n            }\n            return str.replace(/%d/i, number);\n        };\n    }, months = [\n        'يناير',\n        'فبراير',\n        'مارس',\n        'أبريل',\n        'مايو',\n        'يونيو',\n        'يوليو',\n        'أغسطس',\n        'سبتمبر',\n        'أكتوبر',\n        'نوفمبر',\n        'ديسمبر'\n    ];\n\n    var arLy = moment.defineLocale('ar-ly', {\n        months : months,\n        monthsShort : months,\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/\\u200FM/\\u200FYYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'بعد %s',\n            past : 'منذ %s',\n            s : pluralize('s'),\n            ss : pluralize('s'),\n            m : pluralize('m'),\n            mm : pluralize('m'),\n            h : pluralize('h'),\n            hh : pluralize('h'),\n            d : pluralize('d'),\n            dd : pluralize('d'),\n            M : pluralize('M'),\n            MM : pluralize('M'),\n            y : pluralize('y'),\n            yy : pluralize('y')\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return arLy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var arMa = moment.defineLocale('ar-ma', {\n        months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return arMa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '١',\n        '2': '٢',\n        '3': '٣',\n        '4': '٤',\n        '5': '٥',\n        '6': '٦',\n        '7': '٧',\n        '8': '٨',\n        '9': '٩',\n        '0': '٠'\n    }, numberMap = {\n        '١': '1',\n        '٢': '2',\n        '٣': '3',\n        '٤': '4',\n        '٥': '5',\n        '٦': '6',\n        '٧': '7',\n        '٨': '8',\n        '٩': '9',\n        '٠': '0'\n    };\n\n    var arSa = moment.defineLocale('ar-sa', {\n        months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        preparse: function (string) {\n            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return arSa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var arTn = moment.defineLocale('ar-tn', {\n        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss : '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات'\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return arTn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        1: '-inci',\n        5: '-inci',\n        8: '-inci',\n        70: '-inci',\n        80: '-inci',\n        2: '-nci',\n        7: '-nci',\n        20: '-nci',\n        50: '-nci',\n        3: '-üncü',\n        4: '-üncü',\n        100: '-üncü',\n        6: '-ncı',\n        9: '-uncu',\n        10: '-uncu',\n        30: '-uncu',\n        60: '-ıncı',\n        90: '-ıncı'\n    };\n\n    var az = moment.defineLocale('az', {\n        months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),\n        monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n        weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),\n        weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n        weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[bugün saat] LT',\n            nextDay : '[sabah saat] LT',\n            nextWeek : '[gələn həftə] dddd [saat] LT',\n            lastDay : '[dünən] LT',\n            lastWeek : '[keçən həftə] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s sonra',\n            past : '%s əvvəl',\n            s : 'birneçə saniyə',\n            ss : '%d saniyə',\n            m : 'bir dəqiqə',\n            mm : '%d dəqiqə',\n            h : 'bir saat',\n            hh : '%d saat',\n            d : 'bir gün',\n            dd : '%d gün',\n            M : 'bir ay',\n            MM : '%d ay',\n            y : 'bir il',\n            yy : '%d il'\n        },\n        meridiemParse: /gecə|səhər|gündüz|axşam/,\n        isPM : function (input) {\n            return /^(gündüz|axşam)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'gecə';\n            } else if (hour < 12) {\n                return 'səhər';\n            } else if (hour < 17) {\n                return 'gündüz';\n            } else {\n                return 'axşam';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n        ordinal : function (number) {\n            if (number === 0) {  // special case for zero\n                return number + '-ıncı';\n            }\n            var a = number % 10,\n                b = number % 100 - a,\n                c = number >= 100 ? 100 : null;\n            return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return az;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n            'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n            'dd': 'дзень_дні_дзён',\n            'MM': 'месяц_месяцы_месяцаў',\n            'yy': 'год_гады_гадоў'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвіліна' : 'хвіліну';\n        }\n        else if (key === 'h') {\n            return withoutSuffix ? 'гадзіна' : 'гадзіну';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n\n    var be = moment.defineLocale('be', {\n        months : {\n            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),\n            standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')\n        },\n        monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n        weekdays : {\n            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),\n            standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),\n            isFormat: /\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/\n        },\n        weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY г.',\n            LLL : 'D MMMM YYYY г., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY г., HH:mm'\n        },\n        calendar : {\n            sameDay: '[Сёння ў] LT',\n            nextDay: '[Заўтра ў] LT',\n            lastDay: '[Учора ў] LT',\n            nextWeek: function () {\n                return '[У] dddd [ў] LT';\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[У мінулую] dddd [ў] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[У мінулы] dddd [ў] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'праз %s',\n            past : '%s таму',\n            s : 'некалькі секунд',\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : relativeTimeWithPlural,\n            hh : relativeTimeWithPlural,\n            d : 'дзень',\n            dd : relativeTimeWithPlural,\n            M : 'месяц',\n            MM : relativeTimeWithPlural,\n            y : 'год',\n            yy : relativeTimeWithPlural\n        },\n        meridiemParse: /ночы|раніцы|дня|вечара/,\n        isPM : function (input) {\n            return /^(дня|вечара)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночы';\n            } else if (hour < 12) {\n                return 'раніцы';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечара';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';\n                case 'D':\n                    return number + '-га';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return be;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var bg = moment.defineLocale('bg', {\n        months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),\n        monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),\n        weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n        weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'D.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay : '[Днес в] LT',\n            nextDay : '[Утре в] LT',\n            nextWeek : 'dddd [в] LT',\n            lastDay : '[Вчера в] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[В изминалата] dddd [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[В изминалия] dddd [в] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'след %s',\n            past : 'преди %s',\n            s : 'няколко секунди',\n            ss : '%d секунди',\n            m : 'минута',\n            mm : '%d минути',\n            h : 'час',\n            hh : '%d часа',\n            d : 'ден',\n            dd : '%d дни',\n            M : 'месец',\n            MM : '%d месеца',\n            y : 'година',\n            yy : '%d години'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal : function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return bg;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var bm = moment.defineLocale('bm', {\n        months : 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'),\n        monthsShort : 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n        weekdays : 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n        weekdaysShort : 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n        weekdaysMin : 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'MMMM [tile] D [san] YYYY',\n            LLL : 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n            LLLL : 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm'\n        },\n        calendar : {\n            sameDay : '[Bi lɛrɛ] LT',\n            nextDay : '[Sini lɛrɛ] LT',\n            nextWeek : 'dddd [don lɛrɛ] LT',\n            lastDay : '[Kunu lɛrɛ] LT',\n            lastWeek : 'dddd [tɛmɛnen lɛrɛ] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s kɔnɔ',\n            past : 'a bɛ %s bɔ',\n            s : 'sanga dama dama',\n            ss : 'sekondi %d',\n            m : 'miniti kelen',\n            mm : 'miniti %d',\n            h : 'lɛrɛ kelen',\n            hh : 'lɛrɛ %d',\n            d : 'tile kelen',\n            dd : 'tile %d',\n            M : 'kalo kelen',\n            MM : 'kalo %d',\n            y : 'san kelen',\n            yy : 'san %d'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return bm;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '১',\n        '2': '২',\n        '3': '৩',\n        '4': '৪',\n        '5': '৫',\n        '6': '৬',\n        '7': '৭',\n        '8': '৮',\n        '9': '৯',\n        '0': '০'\n    },\n    numberMap = {\n        '১': '1',\n        '২': '2',\n        '৩': '3',\n        '৪': '4',\n        '৫': '5',\n        '৬': '6',\n        '৭': '7',\n        '৮': '8',\n        '৯': '9',\n        '০': '0'\n    };\n\n    var bn = moment.defineLocale('bn', {\n        months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),\n        monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),\n        weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),\n        weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm সময়',\n            LTS : 'A h:mm:ss সময়',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm সময়',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'\n        },\n        calendar : {\n            sameDay : '[আজ] LT',\n            nextDay : '[আগামীকাল] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[গতকাল] LT',\n            lastWeek : '[গত] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s পরে',\n            past : '%s আগে',\n            s : 'কয়েক সেকেন্ড',\n            ss : '%d সেকেন্ড',\n            m : 'এক মিনিট',\n            mm : '%d মিনিট',\n            h : 'এক ঘন্টা',\n            hh : '%d ঘন্টা',\n            d : 'এক দিন',\n            dd : '%d দিন',\n            M : 'এক মাস',\n            MM : '%d মাস',\n            y : 'এক বছর',\n            yy : '%d বছর'\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'রাত' && hour >= 4) ||\n                    (meridiem === 'দুপুর' && hour < 5) ||\n                    meridiem === 'বিকাল') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 10) {\n                return 'সকাল';\n            } else if (hour < 17) {\n                return 'দুপুর';\n            } else if (hour < 20) {\n                return 'বিকাল';\n            } else {\n                return 'রাত';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return bn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '༡',\n        '2': '༢',\n        '3': '༣',\n        '4': '༤',\n        '5': '༥',\n        '6': '༦',\n        '7': '༧',\n        '8': '༨',\n        '9': '༩',\n        '0': '༠'\n    },\n    numberMap = {\n        '༡': '1',\n        '༢': '2',\n        '༣': '3',\n        '༤': '4',\n        '༥': '5',\n        '༦': '6',\n        '༧': '7',\n        '༨': '8',\n        '༩': '9',\n        '༠': '0'\n    };\n\n    var bo = moment.defineLocale('bo', {\n        months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n        monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n        weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),\n        weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n        weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[དི་རིང] LT',\n            nextDay : '[སང་ཉིན] LT',\n            nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',\n            lastDay : '[ཁ་སང] LT',\n            lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ལ་',\n            past : '%s སྔན་ལ',\n            s : 'ལམ་སང',\n            ss : '%d སྐར་ཆ།',\n            m : 'སྐར་མ་གཅིག',\n            mm : '%d སྐར་མ',\n            h : 'ཆུ་ཚོད་གཅིག',\n            hh : '%d ཆུ་ཚོད',\n            d : 'ཉིན་གཅིག',\n            dd : '%d ཉིན་',\n            M : 'ཟླ་བ་གཅིག',\n            MM : '%d ཟླ་བ',\n            y : 'ལོ་གཅིག',\n            yy : '%d ལོ'\n        },\n        preparse: function (string) {\n            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'མཚན་མོ' && hour >= 4) ||\n                    (meridiem === 'ཉིན་གུང' && hour < 5) ||\n                    meridiem === 'དགོང་དག') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'མཚན་མོ';\n            } else if (hour < 10) {\n                return 'ཞོགས་ཀས';\n            } else if (hour < 17) {\n                return 'ཉིན་གུང';\n            } else if (hour < 20) {\n                return 'དགོང་དག';\n            } else {\n                return 'མཚན་མོ';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return bo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function relativeTimeWithMutation(number, withoutSuffix, key) {\n        var format = {\n            'mm': 'munutenn',\n            'MM': 'miz',\n            'dd': 'devezh'\n        };\n        return number + ' ' + mutation(format[key], number);\n    }\n    function specialMutationForYears(number) {\n        switch (lastNumber(number)) {\n            case 1:\n            case 3:\n            case 4:\n            case 5:\n            case 9:\n                return number + ' bloaz';\n            default:\n                return number + ' vloaz';\n        }\n    }\n    function lastNumber(number) {\n        if (number > 9) {\n            return lastNumber(number % 10);\n        }\n        return number;\n    }\n    function mutation(text, number) {\n        if (number === 2) {\n            return softMutation(text);\n        }\n        return text;\n    }\n    function softMutation(text) {\n        var mutationTable = {\n            'm': 'v',\n            'b': 'v',\n            'd': 'z'\n        };\n        if (mutationTable[text.charAt(0)] === undefined) {\n            return text;\n        }\n        return mutationTable[text.charAt(0)] + text.substring(1);\n    }\n\n    var br = moment.defineLocale('br', {\n        months : 'Genver_C\\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),\n        monthsShort : 'Gen_C\\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n        weekdays : 'Sul_Lun_Meurzh_Merc\\'her_Yaou_Gwener_Sadorn'.split('_'),\n        weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n        weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h[e]mm A',\n            LTS : 'h[e]mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D [a viz] MMMM YYYY',\n            LLL : 'D [a viz] MMMM YYYY h[e]mm A',\n            LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'\n        },\n        calendar : {\n            sameDay : '[Hiziv da] LT',\n            nextDay : '[Warc\\'hoazh da] LT',\n            nextWeek : 'dddd [da] LT',\n            lastDay : '[Dec\\'h da] LT',\n            lastWeek : 'dddd [paset da] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'a-benn %s',\n            past : '%s \\'zo',\n            s : 'un nebeud segondennoù',\n            ss : '%d eilenn',\n            m : 'ur vunutenn',\n            mm : relativeTimeWithMutation,\n            h : 'un eur',\n            hh : '%d eur',\n            d : 'un devezh',\n            dd : relativeTimeWithMutation,\n            M : 'ur miz',\n            MM : relativeTimeWithMutation,\n            y : 'ur bloaz',\n            yy : specialMutationForYears\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n        ordinal : function (number) {\n            var output = (number === 1) ? 'añ' : 'vet';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return br;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var bs = moment.defineLocale('bs', {\n        months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danas u] LT',\n            nextDay  : '[sutra u] LT',\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[jučer u] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'par sekundi',\n            ss     : translate,\n            m      : translate,\n            mm     : translate,\n            h      : translate,\n            hh     : translate,\n            d      : 'dan',\n            dd     : translate,\n            M      : 'mjesec',\n            MM     : translate,\n            y      : 'godinu',\n            yy     : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return bs;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ca = moment.defineLocale('ca', {\n        months : {\n            standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),\n            format: 'de gener_de febrer_de març_d\\'abril_de maig_de juny_de juliol_d\\'agost_de setembre_d\\'octubre_de novembre_de desembre'.split('_'),\n            isFormat: /D[oD]?(\\s)+MMMM/\n        },\n        monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),\n        weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin : 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM [de] YYYY',\n            ll : 'D MMM YYYY',\n            LLL : 'D MMMM [de] YYYY [a les] H:mm',\n            lll : 'D MMM YYYY, H:mm',\n            LLLL : 'dddd D MMMM [de] YYYY [a les] H:mm',\n            llll : 'ddd D MMM YYYY, H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            nextDay : function () {\n                return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            lastDay : function () {\n                return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'd\\'aquí %s',\n            past : 'fa %s',\n            s : 'uns segons',\n            ss : '%d segons',\n            m : 'un minut',\n            mm : '%d minuts',\n            h : 'una hora',\n            hh : '%d hores',\n            d : 'un dia',\n            dd : '%d dies',\n            M : 'un mes',\n            MM : '%d mesos',\n            y : 'un any',\n            yy : '%d anys'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal : function (number, period) {\n            var output = (number === 1) ? 'r' :\n                (number === 2) ? 'n' :\n                (number === 3) ? 'r' :\n                (number === 4) ? 't' : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ca;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),\n        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');\n\n    var monthsParse = [/^led/i, /^úno/i, /^bře/i, /^dub/i, /^kvě/i, /^(čvn|červen$|června)/i, /^(čvc|červenec|července)/i, /^srp/i, /^zář/i, /^říj/i, /^lis/i, /^pro/i];\n    // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n    // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n    var monthsRegex = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;\n\n    function plural(n) {\n        return (n > 1) && (n < 5) && (~~(n / 10) !== 1);\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':  // a few seconds / in a few seconds / a few seconds ago\n                return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekund');\n                } else {\n                    return result + 'sekundami';\n                }\n                break;\n            case 'm':  // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minuty' : 'minut');\n                } else {\n                    return result + 'minutami';\n                }\n                break;\n            case 'h':  // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodin');\n                } else {\n                    return result + 'hodinami';\n                }\n                break;\n            case 'd':  // a day / in a day / a day ago\n                return (withoutSuffix || isFuture) ? 'den' : 'dnem';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dny' : 'dní');\n                } else {\n                    return result + 'dny';\n                }\n                break;\n            case 'M':  // a month / in a month / a month ago\n                return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'měsíce' : 'měsíců');\n                } else {\n                    return result + 'měsíci';\n                }\n                break;\n            case 'y':  // a year / in a year / a year ago\n                return (withoutSuffix || isFuture) ? 'rok' : 'rokem';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'let');\n                } else {\n                    return result + 'lety';\n                }\n                break;\n        }\n    }\n\n    var cs = moment.defineLocale('cs', {\n        months : months,\n        monthsShort : monthsShort,\n        monthsRegex : monthsRegex,\n        monthsShortRegex : monthsRegex,\n        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n        monthsStrictRegex : /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,\n        monthsShortStrictRegex : /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n        weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n        weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),\n        weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),\n        longDateFormat : {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd D. MMMM YYYY H:mm',\n            l : 'D. M. YYYY'\n        },\n        calendar : {\n            sameDay: '[dnes v] LT',\n            nextDay: '[zítra v] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [v] LT';\n                    case 3:\n                        return '[ve středu v] LT';\n                    case 4:\n                        return '[ve čtvrtek v] LT';\n                    case 5:\n                        return '[v pátek v] LT';\n                    case 6:\n                        return '[v sobotu v] LT';\n                }\n            },\n            lastDay: '[včera v] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulou neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[minulé] dddd [v] LT';\n                    case 3:\n                        return '[minulou středu v] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [v] LT';\n                    case 6:\n                        return '[minulou sobotu v] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : 'před %s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return cs;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var cv = moment.defineLocale('cv', {\n        months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),\n        monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n        weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),\n        weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n        weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n            LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n            LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'\n        },\n        calendar : {\n            sameDay: '[Паян] LT [сехетре]',\n            nextDay: '[Ыран] LT [сехетре]',\n            lastDay: '[Ӗнер] LT [сехетре]',\n            nextWeek: '[Ҫитес] dddd LT [сехетре]',\n            lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : function (output) {\n                var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';\n                return output + affix;\n            },\n            past : '%s каялла',\n            s : 'пӗр-ик ҫеккунт',\n            ss : '%d ҫеккунт',\n            m : 'пӗр минут',\n            mm : '%d минут',\n            h : 'пӗр сехет',\n            hh : '%d сехет',\n            d : 'пӗр кун',\n            dd : '%d кун',\n            M : 'пӗр уйӑх',\n            MM : '%d уйӑх',\n            y : 'пӗр ҫул',\n            yy : '%d ҫул'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n        ordinal : '%d-мӗш',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return cv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var cy = moment.defineLocale('cy', {\n        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),\n        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),\n        weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),\n        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n        weekdaysParseExact : true,\n        // time formats are the same as en-gb\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[Heddiw am] LT',\n            nextDay: '[Yfory am] LT',\n            nextWeek: 'dddd [am] LT',\n            lastDay: '[Ddoe am] LT',\n            lastWeek: 'dddd [diwethaf am] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'mewn %s',\n            past: '%s yn ôl',\n            s: 'ychydig eiliadau',\n            ss: '%d eiliad',\n            m: 'munud',\n            mm: '%d munud',\n            h: 'awr',\n            hh: '%d awr',\n            d: 'diwrnod',\n            dd: '%d diwrnod',\n            M: 'mis',\n            MM: '%d mis',\n            y: 'blwyddyn',\n            yy: '%d flynedd'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n        ordinal: function (number) {\n            var b = number,\n                output = '',\n                lookup = [\n                    '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed\n                    'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed\n                ];\n            if (b > 20) {\n                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n                    output = 'fed'; // not 30ain, 70ain or 90ain\n                } else {\n                    output = 'ain';\n                }\n            } else if (b > 0) {\n                output = lookup[b];\n            }\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return cy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var da = moment.defineLocale('da', {\n        months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n        weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay : '[i dag kl.] LT',\n            nextDay : '[i morgen kl.] LT',\n            nextWeek : 'på dddd [kl.] LT',\n            lastDay : '[i går kl.] LT',\n            lastWeek : '[i] dddd[s kl.] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s siden',\n            s : 'få sekunder',\n            ss : '%d sekunder',\n            m : 'et minut',\n            mm : '%d minutter',\n            h : 'en time',\n            hh : '%d timer',\n            d : 'en dag',\n            dd : '%d dage',\n            M : 'en måned',\n            MM : '%d måneder',\n            y : 'et år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return da;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var de = moment.defineLocale('de', {\n        months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return de;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deAt = moment.defineLocale('de-at', {\n        months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return deAt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deCh = moment.defineLocale('de-ch', {\n        months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return deCh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'ޖެނުއަރީ',\n        'ފެބްރުއަރީ',\n        'މާރިޗު',\n        'އޭޕްރީލު',\n        'މޭ',\n        'ޖޫން',\n        'ޖުލައި',\n        'އޯގަސްޓު',\n        'ސެޕްޓެމްބަރު',\n        'އޮކްޓޯބަރު',\n        'ނޮވެމްބަރު',\n        'ޑިސެމްބަރު'\n    ], weekdays = [\n        'އާދިއްތަ',\n        'ހޯމަ',\n        'އަންގާރަ',\n        'ބުދަ',\n        'ބުރާސްފަތި',\n        'ހުކުރު',\n        'ހޮނިހިރު'\n    ];\n\n    var dv = moment.defineLocale('dv', {\n        months : months,\n        monthsShort : months,\n        weekdays : weekdays,\n        weekdaysShort : weekdays,\n        weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n        longDateFormat : {\n\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/M/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /މކ|މފ/,\n        isPM : function (input) {\n            return 'މފ' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'މކ';\n            } else {\n                return 'މފ';\n            }\n        },\n        calendar : {\n            sameDay : '[މިއަދު] LT',\n            nextDay : '[މާދަމާ] LT',\n            nextWeek : 'dddd LT',\n            lastDay : '[އިއްޔެ] LT',\n            lastWeek : '[ފާއިތުވި] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ތެރޭގައި %s',\n            past : 'ކުރިން %s',\n            s : 'ސިކުންތުކޮޅެއް',\n            ss : 'd% ސިކުންތު',\n            m : 'މިނިޓެއް',\n            mm : 'މިނިޓު %d',\n            h : 'ގަޑިއިރެއް',\n            hh : 'ގަޑިއިރު %d',\n            d : 'ދުވަހެއް',\n            dd : 'ދުވަސް %d',\n            M : 'މަހެއް',\n            MM : 'މަސް %d',\n            y : 'އަހަރެއް',\n            yy : 'އަހަރު %d'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 7,  // Sunday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return dv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    function isFunction(input) {\n        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n    }\n\n\n    var el = moment.defineLocale('el', {\n        monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),\n        monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),\n        months : function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return this._monthsNominativeEl;\n            } else if (typeof format === 'string' && /D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'\n                return this._monthsGenitiveEl[momentToFormat.month()];\n            } else {\n                return this._monthsNominativeEl[momentToFormat.month()];\n            }\n        },\n        monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n        weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),\n        weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n        weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'μμ' : 'ΜΜ';\n            } else {\n                return isLower ? 'πμ' : 'ΠΜ';\n            }\n        },\n        isPM : function (input) {\n            return ((input + '').toLowerCase()[0] === 'μ');\n        },\n        meridiemParse : /[ΠΜ]\\.?Μ?\\.?/i,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendarEl : {\n            sameDay : '[Σήμερα {}] LT',\n            nextDay : '[Αύριο {}] LT',\n            nextWeek : 'dddd [{}] LT',\n            lastDay : '[Χθες {}] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 6:\n                        return '[το προηγούμενο] dddd [{}] LT';\n                    default:\n                        return '[την προηγούμενη] dddd [{}] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        calendar : function (key, mom) {\n            var output = this._calendarEl[key],\n                hours = mom && mom.hours();\n            if (isFunction(output)) {\n                output = output.apply(mom);\n            }\n            return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));\n        },\n        relativeTime : {\n            future : 'σε %s',\n            past : '%s πριν',\n            s : 'λίγα δευτερόλεπτα',\n            ss : '%d δευτερόλεπτα',\n            m : 'ένα λεπτό',\n            mm : '%d λεπτά',\n            h : 'μία ώρα',\n            hh : '%d ώρες',\n            d : 'μία μέρα',\n            dd : '%d μέρες',\n            M : 'ένας μήνας',\n            MM : '%d μήνες',\n            y : 'ένας χρόνος',\n            yy : '%d χρόνια'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}η/,\n        ordinal: '%dη',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4st is the first week of the year.\n        }\n    });\n\n    return el;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enSG = moment.defineLocale('en-SG', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enSG;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enAu = moment.defineLocale('en-au', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enAu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enCa = moment.defineLocale('en-ca', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'YYYY-MM-DD',\n            LL : 'MMMM D, YYYY',\n            LLL : 'MMMM D, YYYY h:mm A',\n            LLLL : 'dddd, MMMM D, YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    return enCa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enGb = moment.defineLocale('en-gb', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enGb;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enIe = moment.defineLocale('en-ie', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enIe;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enIl = moment.defineLocale('en-il', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    return enIl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enNz = moment.defineLocale('en-nz', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enNz;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var eo = moment.defineLocale('eo', {\n        months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),\n        weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n        weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D[-a de] MMMM, YYYY',\n            LLL : 'D[-a de] MMMM, YYYY HH:mm',\n            LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm'\n        },\n        meridiemParse: /[ap]\\.t\\.m/i,\n        isPM: function (input) {\n            return input.charAt(0).toLowerCase() === 'p';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'p.t.m.' : 'P.T.M.';\n            } else {\n                return isLower ? 'a.t.m.' : 'A.T.M.';\n            }\n        },\n        calendar : {\n            sameDay : '[Hodiaŭ je] LT',\n            nextDay : '[Morgaŭ je] LT',\n            nextWeek : 'dddd [je] LT',\n            lastDay : '[Hieraŭ je] LT',\n            lastWeek : '[pasinta] dddd [je] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'post %s',\n            past : 'antaŭ %s',\n            s : 'sekundoj',\n            ss : '%d sekundoj',\n            m : 'minuto',\n            mm : '%d minutoj',\n            h : 'horo',\n            hh : '%d horoj',\n            d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo\n            dd : '%d tagoj',\n            M : 'monato',\n            MM : '%d monatoj',\n            y : 'jaro',\n            yy : '%d jaroj'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}a/,\n        ordinal : '%da',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return eo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n    var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var es = moment.defineLocale('es', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex : monthsRegex,\n        monthsShortRegex : monthsRegex,\n        monthsStrictRegex : /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex : /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY H:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return es;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n    var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esDo = moment.defineLocale('es-do', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return esDo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n    var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esUs = moment.defineLocale('es-us', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'MM/DD/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return esUs;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n            'ss': [number + 'sekundi', number + 'sekundit'],\n            'm' : ['ühe minuti', 'üks minut'],\n            'mm': [number + ' minuti', number + ' minutit'],\n            'h' : ['ühe tunni', 'tund aega', 'üks tund'],\n            'hh': [number + ' tunni', number + ' tundi'],\n            'd' : ['ühe päeva', 'üks päev'],\n            'M' : ['kuu aja', 'kuu aega', 'üks kuu'],\n            'MM': [number + ' kuu', number + ' kuud'],\n            'y' : ['ühe aasta', 'aasta', 'üks aasta'],\n            'yy': [number + ' aasta', number + ' aastat']\n        };\n        if (withoutSuffix) {\n            return format[key][2] ? format[key][2] : format[key][1];\n        }\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var et = moment.defineLocale('et', {\n        months        : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),\n        monthsShort   : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n        weekdays      : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),\n        weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),\n        weekdaysMin   : 'P_E_T_K_N_R_L'.split('_'),\n        longDateFormat : {\n            LT   : 'H:mm',\n            LTS : 'H:mm:ss',\n            L    : 'DD.MM.YYYY',\n            LL   : 'D. MMMM YYYY',\n            LLL  : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[Täna,] LT',\n            nextDay  : '[Homme,] LT',\n            nextWeek : '[Järgmine] dddd LT',\n            lastDay  : '[Eile,] LT',\n            lastWeek : '[Eelmine] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s pärast',\n            past   : '%s tagasi',\n            s      : processRelativeTime,\n            ss     : processRelativeTime,\n            m      : processRelativeTime,\n            mm     : processRelativeTime,\n            h      : processRelativeTime,\n            hh     : processRelativeTime,\n            d      : processRelativeTime,\n            dd     : '%d päeva',\n            M      : processRelativeTime,\n            MM     : processRelativeTime,\n            y      : processRelativeTime,\n            yy     : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return et;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var eu = moment.defineLocale('eu', {\n        months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),\n        monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),\n        weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),\n        weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY[ko] MMMM[ren] D[a]',\n            LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n            LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n            l : 'YYYY-M-D',\n            ll : 'YYYY[ko] MMM D[a]',\n            lll : 'YYYY[ko] MMM D[a] HH:mm',\n            llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'\n        },\n        calendar : {\n            sameDay : '[gaur] LT[etan]',\n            nextDay : '[bihar] LT[etan]',\n            nextWeek : 'dddd LT[etan]',\n            lastDay : '[atzo] LT[etan]',\n            lastWeek : '[aurreko] dddd LT[etan]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s barru',\n            past : 'duela %s',\n            s : 'segundo batzuk',\n            ss : '%d segundo',\n            m : 'minutu bat',\n            mm : '%d minutu',\n            h : 'ordu bat',\n            hh : '%d ordu',\n            d : 'egun bat',\n            dd : '%d egun',\n            M : 'hilabete bat',\n            MM : '%d hilabete',\n            y : 'urte bat',\n            yy : '%d urte'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return eu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '۱',\n        '2': '۲',\n        '3': '۳',\n        '4': '۴',\n        '5': '۵',\n        '6': '۶',\n        '7': '۷',\n        '8': '۸',\n        '9': '۹',\n        '0': '۰'\n    }, numberMap = {\n        '۱': '1',\n        '۲': '2',\n        '۳': '3',\n        '۴': '4',\n        '۵': '5',\n        '۶': '6',\n        '۷': '7',\n        '۸': '8',\n        '۹': '9',\n        '۰': '0'\n    };\n\n    var fa = moment.defineLocale('fa', {\n        months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n        monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n        weekdays : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n        weekdaysShort : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n        weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /قبل از ظهر|بعد از ظهر/,\n        isPM: function (input) {\n            return /بعد از ظهر/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'قبل از ظهر';\n            } else {\n                return 'بعد از ظهر';\n            }\n        },\n        calendar : {\n            sameDay : '[امروز ساعت] LT',\n            nextDay : '[فردا ساعت] LT',\n            nextWeek : 'dddd [ساعت] LT',\n            lastDay : '[دیروز ساعت] LT',\n            lastWeek : 'dddd [پیش] [ساعت] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'در %s',\n            past : '%s پیش',\n            s : 'چند ثانیه',\n            ss : 'ثانیه d%',\n            m : 'یک دقیقه',\n            mm : '%d دقیقه',\n            h : 'یک ساعت',\n            hh : '%d ساعت',\n            d : 'یک روز',\n            dd : '%d روز',\n            M : 'یک ماه',\n            MM : '%d ماه',\n            y : 'یک سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/[۰-۹]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}م/,\n        ordinal : '%dم',\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12 // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return fa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),\n        numbersFuture = [\n            'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',\n            numbersPast[7], numbersPast[8], numbersPast[9]\n        ];\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = '';\n        switch (key) {\n            case 's':\n                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n            case 'ss':\n                return isFuture ? 'sekunnin' : 'sekuntia';\n            case 'm':\n                return isFuture ? 'minuutin' : 'minuutti';\n            case 'mm':\n                result = isFuture ? 'minuutin' : 'minuuttia';\n                break;\n            case 'h':\n                return isFuture ? 'tunnin' : 'tunti';\n            case 'hh':\n                result = isFuture ? 'tunnin' : 'tuntia';\n                break;\n            case 'd':\n                return isFuture ? 'päivän' : 'päivä';\n            case 'dd':\n                result = isFuture ? 'päivän' : 'päivää';\n                break;\n            case 'M':\n                return isFuture ? 'kuukauden' : 'kuukausi';\n            case 'MM':\n                result = isFuture ? 'kuukauden' : 'kuukautta';\n                break;\n            case 'y':\n                return isFuture ? 'vuoden' : 'vuosi';\n            case 'yy':\n                result = isFuture ? 'vuoden' : 'vuotta';\n                break;\n        }\n        result = verbalNumber(number, isFuture) + ' ' + result;\n        return result;\n    }\n    function verbalNumber(number, isFuture) {\n        return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;\n    }\n\n    var fi = moment.defineLocale('fi', {\n        months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),\n        monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),\n        weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),\n        weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),\n        weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD.MM.YYYY',\n            LL : 'Do MMMM[ta] YYYY',\n            LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',\n            LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n            l : 'D.M.YYYY',\n            ll : 'Do MMM YYYY',\n            lll : 'Do MMM YYYY, [klo] HH.mm',\n            llll : 'ddd, Do MMM YYYY, [klo] HH.mm'\n        },\n        calendar : {\n            sameDay : '[tänään] [klo] LT',\n            nextDay : '[huomenna] [klo] LT',\n            nextWeek : 'dddd [klo] LT',\n            lastDay : '[eilen] [klo] LT',\n            lastWeek : '[viime] dddd[na] [klo] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s päästä',\n            past : '%s sitten',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var fo = moment.defineLocale('fo', {\n        months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),\n        weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n        weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D. MMMM, YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Í dag kl.] LT',\n            nextDay : '[Í morgin kl.] LT',\n            nextWeek : 'dddd [kl.] LT',\n            lastDay : '[Í gjár kl.] LT',\n            lastWeek : '[síðstu] dddd [kl] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'um %s',\n            past : '%s síðani',\n            s : 'fá sekund',\n            ss : '%d sekundir',\n            m : 'ein minuttur',\n            mm : '%d minuttir',\n            h : 'ein tími',\n            hh : '%d tímar',\n            d : 'ein dagur',\n            dd : '%d dagar',\n            M : 'ein mánaður',\n            MM : '%d mánaðir',\n            y : 'eitt ár',\n            yy : '%d ár'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var fr = moment.defineLocale('fr', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // TODO: Return 'e' when day of month > 1. Move this case inside\n                // block for masculine words below.\n                // See https://github.com/moment/moment/issues/3375\n                case 'D':\n                    return number + (number === 1 ? 'er' : '');\n\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var frCa = moment.defineLocale('fr-ca', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        }\n    });\n\n    return frCa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var frCh = moment.defineLocale('fr-ch', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return frCh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\n    var fy = moment.defineLocale('fy', {\n        months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n        monthsParseExact : true,\n        weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),\n        weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),\n        weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[hjoed om] LT',\n            nextDay: '[moarn om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[juster om] LT',\n            lastWeek: '[ôfrûne] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'oer %s',\n            past : '%s lyn',\n            s : 'in pear sekonden',\n            ss : '%d sekonden',\n            m : 'ien minút',\n            mm : '%d minuten',\n            h : 'ien oere',\n            hh : '%d oeren',\n            d : 'ien dei',\n            dd : '%d dagen',\n            M : 'ien moanne',\n            MM : '%d moannen',\n            y : 'ien jier',\n            yy : '%d jierren'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n\n    var months = [\n        'Eanáir', 'Feabhra', 'Márta', 'Aibreán', 'Bealtaine', 'Méitheamh', 'Iúil', 'Lúnasa', 'Meán Fómhair', 'Deaireadh Fómhair', 'Samhain', 'Nollaig'\n    ];\n\n    var monthsShort = ['Eaná', 'Feab', 'Márt', 'Aibr', 'Beal', 'Méit', 'Iúil', 'Lúna', 'Meán', 'Deai', 'Samh', 'Noll'];\n\n    var weekdays = ['Dé Domhnaigh', 'Dé Luain', 'Dé Máirt', 'Dé Céadaoin', 'Déardaoin', 'Dé hAoine', 'Dé Satharn'];\n\n    var weekdaysShort = ['Dom', 'Lua', 'Mái', 'Céa', 'Déa', 'hAo', 'Sat'];\n\n    var weekdaysMin = ['Do', 'Lu', 'Má', 'Ce', 'Dé', 'hA', 'Sa'];\n\n    var ga = moment.defineLocale('ga', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsParseExact: true,\n        weekdays: weekdays,\n        weekdaysShort: weekdaysShort,\n        weekdaysMin: weekdaysMin,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[Inniu ag] LT',\n            nextDay: '[Amárach ag] LT',\n            nextWeek: 'dddd [ag] LT',\n            lastDay: '[Inné aig] LT',\n            lastWeek: 'dddd [seo caite] [ag] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'i %s',\n            past: '%s ó shin',\n            s: 'cúpla soicind',\n            ss: '%d soicind',\n            m: 'nóiméad',\n            mm: '%d nóiméad',\n            h: 'uair an chloig',\n            hh: '%d uair an chloig',\n            d: 'lá',\n            dd: '%d lá',\n            M: 'mí',\n            MM: '%d mí',\n            y: 'bliain',\n            yy: '%d bliain'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ga;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'\n    ];\n\n    var monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];\n\n    var weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];\n\n    var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];\n\n    var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n    var gd = moment.defineLocale('gd', {\n        months : months,\n        monthsShort : monthsShort,\n        monthsParseExact : true,\n        weekdays : weekdays,\n        weekdaysShort : weekdaysShort,\n        weekdaysMin : weekdaysMin,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[An-diugh aig] LT',\n            nextDay : '[A-màireach aig] LT',\n            nextWeek : 'dddd [aig] LT',\n            lastDay : '[An-dè aig] LT',\n            lastWeek : 'dddd [seo chaidh] [aig] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ann an %s',\n            past : 'bho chionn %s',\n            s : 'beagan diogan',\n            ss : '%d diogan',\n            m : 'mionaid',\n            mm : '%d mionaidean',\n            h : 'uair',\n            hh : '%d uairean',\n            d : 'latha',\n            dd : '%d latha',\n            M : 'mìos',\n            MM : '%d mìosan',\n            y : 'bliadhna',\n            yy : '%d bliadhna'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(d|na|mh)/,\n        ordinal : function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return gd;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var gl = moment.defineLocale('gl', {\n        months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),\n        monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY H:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n            },\n            lastDay : function () {\n                return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';\n            },\n            lastWeek : function () {\n                return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : function (str) {\n                if (str.indexOf('un') === 0) {\n                    return 'n' + str;\n                }\n                return 'en ' + str;\n            },\n            past : 'hai %s',\n            s : 'uns segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'unha hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return gl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's': ['thodde secondanim', 'thodde second'],\n            'ss': [number + ' secondanim', number + ' second'],\n            'm': ['eka mintan', 'ek minute'],\n            'mm': [number + ' mintanim', number + ' mintam'],\n            'h': ['eka voran', 'ek vor'],\n            'hh': [number + ' voranim', number + ' voram'],\n            'd': ['eka disan', 'ek dis'],\n            'dd': [number + ' disanim', number + ' dis'],\n            'M': ['eka mhoinean', 'ek mhoino'],\n            'MM': [number + ' mhoineanim', number + ' mhoine'],\n            'y': ['eka vorsan', 'ek voros'],\n            'yy': [number + ' vorsanim', number + ' vorsam']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var gomLatn = moment.defineLocale('gom-latn', {\n        months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'),\n        monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\\'var'.split('_'),\n        weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n        weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'A h:mm [vazta]',\n            LTS : 'A h:mm:ss [vazta]',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY A h:mm [vazta]',\n            LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]',\n            llll: 'ddd, D MMM YYYY, A h:mm [vazta]'\n        },\n        calendar : {\n            sameDay: '[Aiz] LT',\n            nextDay: '[Faleam] LT',\n            nextWeek: '[Ieta to] dddd[,] LT',\n            lastDay: '[Kal] LT',\n            lastWeek: '[Fatlo] dddd[,] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s',\n            past : '%s adim',\n            s : processRelativeTime,\n            ss : processRelativeTime,\n            m : processRelativeTime,\n            mm : processRelativeTime,\n            h : processRelativeTime,\n            hh : processRelativeTime,\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(er)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // the ordinal 'er' only applies to day of the month\n                case 'D':\n                    return number + 'er';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        },\n        meridiemParse: /rati|sokalli|donparam|sanje/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'rati') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'sokalli') {\n                return hour;\n            } else if (meridiem === 'donparam') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'sanje') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'rati';\n            } else if (hour < 12) {\n                return 'sokalli';\n            } else if (hour < 16) {\n                return 'donparam';\n            } else if (hour < 20) {\n                return 'sanje';\n            } else {\n                return 'rati';\n            }\n        }\n    });\n\n    return gomLatn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n            '1': '૧',\n            '2': '૨',\n            '3': '૩',\n            '4': '૪',\n            '5': '૫',\n            '6': '૬',\n            '7': '૭',\n            '8': '૮',\n            '9': '૯',\n            '0': '૦'\n        },\n        numberMap = {\n            '૧': '1',\n            '૨': '2',\n            '૩': '3',\n            '૪': '4',\n            '૫': '5',\n            '૬': '6',\n            '૭': '7',\n            '૮': '8',\n            '૯': '9',\n            '૦': '0'\n        };\n\n    var gu = moment.defineLocale('gu', {\n        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split('_'),\n        monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split('_'),\n        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm વાગ્યે',\n            LTS: 'A h:mm:ss વાગ્યે',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે'\n        },\n        calendar: {\n            sameDay: '[આજ] LT',\n            nextDay: '[કાલે] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ગઇકાલે] LT',\n            lastWeek: '[પાછલા] dddd, LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%s મા',\n            past: '%s પેહલા',\n            s: 'અમુક પળો',\n            ss: '%d સેકંડ',\n            m: 'એક મિનિટ',\n            mm: '%d મિનિટ',\n            h: 'એક કલાક',\n            hh: '%d કલાક',\n            d: 'એક દિવસ',\n            dd: '%d દિવસ',\n            M: 'એક મહિનો',\n            MM: '%d મહિનો',\n            y: 'એક વર્ષ',\n            yy: '%d વર્ષ'\n        },\n        preparse: function (string) {\n            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'રાત') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'સવાર') {\n                return hour;\n            } else if (meridiem === 'બપોર') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'સાંજ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'રાત';\n            } else if (hour < 10) {\n                return 'સવાર';\n            } else if (hour < 17) {\n                return 'બપોર';\n            } else if (hour < 20) {\n                return 'સાંજ';\n            } else {\n                return 'રાત';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6 // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return gu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var he = moment.defineLocale('he', {\n        months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),\n        monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n        weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n        weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n        weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [ב]MMMM YYYY',\n            LLL : 'D [ב]MMMM YYYY HH:mm',\n            LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',\n            l : 'D/M/YYYY',\n            ll : 'D MMM YYYY',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd, D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[היום ב־]LT',\n            nextDay : '[מחר ב־]LT',\n            nextWeek : 'dddd [בשעה] LT',\n            lastDay : '[אתמול ב־]LT',\n            lastWeek : '[ביום] dddd [האחרון בשעה] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'בעוד %s',\n            past : 'לפני %s',\n            s : 'מספר שניות',\n            ss : '%d שניות',\n            m : 'דקה',\n            mm : '%d דקות',\n            h : 'שעה',\n            hh : function (number) {\n                if (number === 2) {\n                    return 'שעתיים';\n                }\n                return number + ' שעות';\n            },\n            d : 'יום',\n            dd : function (number) {\n                if (number === 2) {\n                    return 'יומיים';\n                }\n                return number + ' ימים';\n            },\n            M : 'חודש',\n            MM : function (number) {\n                if (number === 2) {\n                    return 'חודשיים';\n                }\n                return number + ' חודשים';\n            },\n            y : 'שנה',\n            yy : function (number) {\n                if (number === 2) {\n                    return 'שנתיים';\n                } else if (number % 10 === 0 && number !== 10) {\n                    return number + ' שנה';\n                }\n                return number + ' שנים';\n            }\n        },\n        meridiemParse: /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n        isPM : function (input) {\n            return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 5) {\n                return 'לפנות בוקר';\n            } else if (hour < 10) {\n                return 'בבוקר';\n            } else if (hour < 12) {\n                return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n            } else if (hour < 18) {\n                return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n            } else {\n                return 'בערב';\n            }\n        }\n    });\n\n    return he;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    var hi = moment.defineLocale('hi', {\n        months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),\n        monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm बजे',\n            LTS : 'A h:mm:ss बजे',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm बजे',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[कल] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[कल] LT',\n            lastWeek : '[पिछले] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s में',\n            past : '%s पहले',\n            s : 'कुछ ही क्षण',\n            ss : '%d सेकंड',\n            m : 'एक मिनट',\n            mm : '%d मिनट',\n            h : 'एक घंटा',\n            hh : '%d घंटे',\n            d : 'एक दिन',\n            dd : '%d दिन',\n            M : 'एक महीने',\n            MM : '%d महीने',\n            y : 'एक वर्ष',\n            yy : '%d वर्ष'\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n        meridiemParse: /रात|सुबह|दोपहर|शाम/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सुबह') {\n                return hour;\n            } else if (meridiem === 'दोपहर') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'शाम') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात';\n            } else if (hour < 10) {\n                return 'सुबह';\n            } else if (hour < 17) {\n                return 'दोपहर';\n            } else if (hour < 20) {\n                return 'शाम';\n            } else {\n                return 'रात';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return hi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var hr = moment.defineLocale('hr', {\n        months : {\n            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),\n            standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')\n        },\n        monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danas u] LT',\n            nextDay  : '[sutra u] LT',\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[jučer u] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'par sekundi',\n            ss     : translate,\n            m      : translate,\n            mm     : translate,\n            h      : translate,\n            hh     : translate,\n            d      : 'dan',\n            dd     : translate,\n            M      : 'mjesec',\n            MM     : translate,\n            y      : 'godinu',\n            yy     : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return hr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n    function translate(number, withoutSuffix, key, isFuture) {\n        var num = number;\n        switch (key) {\n            case 's':\n                return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';\n            case 'ss':\n                return num + (isFuture || withoutSuffix) ? ' másodperc' : ' másodperce';\n            case 'm':\n                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'mm':\n                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'h':\n                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'hh':\n                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'd':\n                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'dd':\n                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'M':\n                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'MM':\n                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'y':\n                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n            case 'yy':\n                return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n        }\n        return '';\n    }\n    function week(isFuture) {\n        return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';\n    }\n\n    var hu = moment.defineLocale('hu', {\n        months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),\n        monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),\n        weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n        weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n        weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'YYYY.MM.DD.',\n            LL : 'YYYY. MMMM D.',\n            LLL : 'YYYY. MMMM D. H:mm',\n            LLLL : 'YYYY. MMMM D., dddd H:mm'\n        },\n        meridiemParse: /de|du/i,\n        isPM: function (input) {\n            return input.charAt(1).toLowerCase() === 'u';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower === true ? 'de' : 'DE';\n            } else {\n                return isLower === true ? 'du' : 'DU';\n            }\n        },\n        calendar : {\n            sameDay : '[ma] LT[-kor]',\n            nextDay : '[holnap] LT[-kor]',\n            nextWeek : function () {\n                return week.call(this, true);\n            },\n            lastDay : '[tegnap] LT[-kor]',\n            lastWeek : function () {\n                return week.call(this, false);\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s múlva',\n            past : '%s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return hu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var hyAm = moment.defineLocale('hy-am', {\n        months : {\n            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),\n            standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')\n        },\n        monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n        weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),\n        weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY թ.',\n            LLL : 'D MMMM YYYY թ., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY թ., HH:mm'\n        },\n        calendar : {\n            sameDay: '[այսօր] LT',\n            nextDay: '[վաղը] LT',\n            lastDay: '[երեկ] LT',\n            nextWeek: function () {\n                return 'dddd [օրը ժամը] LT';\n            },\n            lastWeek: function () {\n                return '[անցած] dddd [օրը ժամը] LT';\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s հետո',\n            past : '%s առաջ',\n            s : 'մի քանի վայրկյան',\n            ss : '%d վայրկյան',\n            m : 'րոպե',\n            mm : '%d րոպե',\n            h : 'ժամ',\n            hh : '%d ժամ',\n            d : 'օր',\n            dd : '%d օր',\n            M : 'ամիս',\n            MM : '%d ամիս',\n            y : 'տարի',\n            yy : '%d տարի'\n        },\n        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n        isPM: function (input) {\n            return /^(ցերեկվա|երեկոյան)$/.test(input);\n        },\n        meridiem : function (hour) {\n            if (hour < 4) {\n                return 'գիշերվա';\n            } else if (hour < 12) {\n                return 'առավոտվա';\n            } else if (hour < 17) {\n                return 'ցերեկվա';\n            } else {\n                return 'երեկոյան';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'DDD':\n                case 'w':\n                case 'W':\n                case 'DDDo':\n                    if (number === 1) {\n                        return number + '-ին';\n                    }\n                    return number + '-րդ';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return hyAm;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var id = moment.defineLocale('id', {\n        months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n        weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n        weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|siang|sore|malam/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'siang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sore' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'siang';\n            } else if (hours < 19) {\n                return 'sore';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Besok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kemarin pukul] LT',\n            lastWeek : 'dddd [lalu pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lalu',\n            s : 'beberapa detik',\n            ss : '%d detik',\n            m : 'semenit',\n            mm : '%d menit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return id;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(n) {\n        if (n % 100 === 11) {\n            return true;\n        } else if (n % 10 === 1) {\n            return false;\n        }\n        return true;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';\n            case 'ss':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum');\n                }\n                return result + 'sekúnda';\n            case 'm':\n                return withoutSuffix ? 'mínúta' : 'mínútu';\n            case 'mm':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');\n                } else if (withoutSuffix) {\n                    return result + 'mínúta';\n                }\n                return result + 'mínútu';\n            case 'hh':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');\n                }\n                return result + 'klukkustund';\n            case 'd':\n                if (withoutSuffix) {\n                    return 'dagur';\n                }\n                return isFuture ? 'dag' : 'degi';\n            case 'dd':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'dagar';\n                    }\n                    return result + (isFuture ? 'daga' : 'dögum');\n                } else if (withoutSuffix) {\n                    return result + 'dagur';\n                }\n                return result + (isFuture ? 'dag' : 'degi');\n            case 'M':\n                if (withoutSuffix) {\n                    return 'mánuður';\n                }\n                return isFuture ? 'mánuð' : 'mánuði';\n            case 'MM':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'mánuðir';\n                    }\n                    return result + (isFuture ? 'mánuði' : 'mánuðum');\n                } else if (withoutSuffix) {\n                    return result + 'mánuður';\n                }\n                return result + (isFuture ? 'mánuð' : 'mánuði');\n            case 'y':\n                return withoutSuffix || isFuture ? 'ár' : 'ári';\n            case 'yy':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n                }\n                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n        }\n    }\n\n    var is = moment.defineLocale('is', {\n        months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n        weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),\n        weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n        weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] H:mm',\n            LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'\n        },\n        calendar : {\n            sameDay : '[í dag kl.] LT',\n            nextDay : '[á morgun kl.] LT',\n            nextWeek : 'dddd [kl.] LT',\n            lastDay : '[í gær kl.] LT',\n            lastWeek : '[síðasta] dddd [kl.] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'eftir %s',\n            past : 'fyrir %s síðan',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : 'klukkustund',\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return is;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var it = moment.defineLocale('it', {\n        months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n        monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n        weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Oggi alle] LT',\n            nextDay: '[Domani alle] LT',\n            nextWeek: 'dddd [alle] LT',\n            lastDay: '[Ieri alle] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[la scorsa] dddd [alle] LT';\n                    default:\n                        return '[lo scorso] dddd [alle] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : function (s) {\n                return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;\n            },\n            past : '%s fa',\n            s : 'alcuni secondi',\n            ss : '%d secondi',\n            m : 'un minuto',\n            mm : '%d minuti',\n            h : 'un\\'ora',\n            hh : '%d ore',\n            d : 'un giorno',\n            dd : '%d giorni',\n            M : 'un mese',\n            MM : '%d mesi',\n            y : 'un anno',\n            yy : '%d anni'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return it;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var itCh = moment.defineLocale('it-ch', {\n        months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n        monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n        weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Oggi alle] LT',\n            nextDay: '[Domani alle] LT',\n            nextWeek: 'dddd [alle] LT',\n            lastDay: '[Ieri alle] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[la scorsa] dddd [alle] LT';\n                    default:\n                        return '[lo scorso] dddd [alle] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : function (s) {\n                return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;\n            },\n            past : '%s fa',\n            s : 'alcuni secondi',\n            ss : '%d secondi',\n            m : 'un minuto',\n            mm : '%d minuti',\n            h : 'un\\'ora',\n            hh : '%d ore',\n            d : 'un giorno',\n            dd : '%d giorni',\n            M : 'un mese',\n            MM : '%d mesi',\n            y : 'un anno',\n            yy : '%d anni'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return itCh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ja = moment.defineLocale('ja', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n        weekdaysShort : '日_月_火_水_木_金_土'.split('_'),\n        weekdaysMin : '日_月_火_水_木_金_土'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日 dddd HH:mm',\n            l : 'YYYY/MM/DD',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日(ddd) HH:mm'\n        },\n        meridiemParse: /午前|午後/i,\n        isPM : function (input) {\n            return input === '午後';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return '午前';\n            } else {\n                return '午後';\n            }\n        },\n        calendar : {\n            sameDay : '[今日] LT',\n            nextDay : '[明日] LT',\n            nextWeek : function (now) {\n                if (now.week() < this.week()) {\n                    return '[来週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            lastDay : '[昨日] LT',\n            lastWeek : function (now) {\n                if (this.week() < now.week()) {\n                    return '[先週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}日/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                default:\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s後',\n            past : '%s前',\n            s : '数秒',\n            ss : '%d秒',\n            m : '1分',\n            mm : '%d分',\n            h : '1時間',\n            hh : '%d時間',\n            d : '1日',\n            dd : '%d日',\n            M : '1ヶ月',\n            MM : '%dヶ月',\n            y : '1年',\n            yy : '%d年'\n        }\n    });\n\n    return ja;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var jv = moment.defineLocale('jv', {\n        months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n        weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n        weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n        weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /enjing|siyang|sonten|ndalu/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'enjing') {\n                return hour;\n            } else if (meridiem === 'siyang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'enjing';\n            } else if (hours < 15) {\n                return 'siyang';\n            } else if (hours < 19) {\n                return 'sonten';\n            } else {\n                return 'ndalu';\n            }\n        },\n        calendar : {\n            sameDay : '[Dinten puniko pukul] LT',\n            nextDay : '[Mbenjang pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kala wingi pukul] LT',\n            lastWeek : 'dddd [kepengker pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'wonten ing %s',\n            past : '%s ingkang kepengker',\n            s : 'sawetawis detik',\n            ss : '%d detik',\n            m : 'setunggal menit',\n            mm : '%d menit',\n            h : 'setunggal jam',\n            hh : '%d jam',\n            d : 'sedinten',\n            dd : '%d dinten',\n            M : 'sewulan',\n            MM : '%d wulan',\n            y : 'setaun',\n            yy : '%d taun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return jv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ka = moment.defineLocale('ka', {\n        months : {\n            standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),\n            format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')\n        },\n        monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n        weekdays : {\n            standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),\n            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),\n            isFormat: /(წინა|შემდეგ)/\n        },\n        weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n        weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[დღეს] LT[-ზე]',\n            nextDay : '[ხვალ] LT[-ზე]',\n            lastDay : '[გუშინ] LT[-ზე]',\n            nextWeek : '[შემდეგ] dddd LT[-ზე]',\n            lastWeek : '[წინა] dddd LT-ზე',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : function (s) {\n                return (/(წამი|წუთი|საათი|წელი)/).test(s) ?\n                    s.replace(/ი$/, 'ში') :\n                    s + 'ში';\n            },\n            past : function (s) {\n                if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {\n                    return s.replace(/(ი|ე)$/, 'ის წინ');\n                }\n                if ((/წელი/).test(s)) {\n                    return s.replace(/წელი$/, 'წლის წინ');\n                }\n            },\n            s : 'რამდენიმე წამი',\n            ss : '%d წამი',\n            m : 'წუთი',\n            mm : '%d წუთი',\n            h : 'საათი',\n            hh : '%d საათი',\n            d : 'დღე',\n            dd : '%d დღე',\n            M : 'თვე',\n            MM : '%d თვე',\n            y : 'წელი',\n            yy : '%d წელი'\n        },\n        dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n        ordinal : function (number) {\n            if (number === 0) {\n                return number;\n            }\n            if (number === 1) {\n                return number + '-ლი';\n            }\n            if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {\n                return 'მე-' + number;\n            }\n            return number + '-ე';\n        },\n        week : {\n            dow : 1,\n            doy : 7\n        }\n    });\n\n    return ka;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-ші',\n        1: '-ші',\n        2: '-ші',\n        3: '-ші',\n        4: '-ші',\n        5: '-ші',\n        6: '-шы',\n        7: '-ші',\n        8: '-ші',\n        9: '-шы',\n        10: '-шы',\n        20: '-шы',\n        30: '-шы',\n        40: '-шы',\n        50: '-ші',\n        60: '-шы',\n        70: '-ші',\n        80: '-ші',\n        90: '-шы',\n        100: '-ші'\n    };\n\n    var kk = moment.defineLocale('kk', {\n        months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),\n        monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n        weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),\n        weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n        weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бүгін сағат] LT',\n            nextDay : '[Ертең сағат] LT',\n            nextWeek : 'dddd [сағат] LT',\n            lastDay : '[Кеше сағат] LT',\n            lastWeek : '[Өткен аптаның] dddd [сағат] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ішінде',\n            past : '%s бұрын',\n            s : 'бірнеше секунд',\n            ss : '%d секунд',\n            m : 'бір минут',\n            mm : '%d минут',\n            h : 'бір сағат',\n            hh : '%d сағат',\n            d : 'бір күн',\n            dd : '%d күн',\n            M : 'бір ай',\n            MM : '%d ай',\n            y : 'бір жыл',\n            yy : '%d жыл'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n        ordinal : function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return kk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '១',\n        '2': '២',\n        '3': '៣',\n        '4': '៤',\n        '5': '៥',\n        '6': '៦',\n        '7': '៧',\n        '8': '៨',\n        '9': '៩',\n        '0': '០'\n    }, numberMap = {\n        '១': '1',\n        '២': '2',\n        '៣': '3',\n        '៤': '4',\n        '៥': '5',\n        '៦': '6',\n        '៧': '7',\n        '៨': '8',\n        '៩': '9',\n        '០': '0'\n    };\n\n    var km = moment.defineLocale('km', {\n        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ព្រឹក|ល្ងាច/,\n        isPM: function (input) {\n            return input === 'ល្ងាច';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ព្រឹក';\n            } else {\n                return 'ល្ងាច';\n            }\n        },\n        calendar: {\n            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n            nextDay: '[ស្អែក ម៉ោង] LT',\n            nextWeek: 'dddd [ម៉ោង] LT',\n            lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%sទៀត',\n            past: '%sមុន',\n            s: 'ប៉ុន្មានវិនាទី',\n            ss: '%d វិនាទី',\n            m: 'មួយនាទី',\n            mm: '%d នាទី',\n            h: 'មួយម៉ោង',\n            hh: '%d ម៉ោង',\n            d: 'មួយថ្ងៃ',\n            dd: '%d ថ្ងៃ',\n            M: 'មួយខែ',\n            MM: '%d ខែ',\n            y: 'មួយឆ្នាំ',\n            yy: '%d ឆ្នាំ'\n        },\n        dayOfMonthOrdinalParse : /ទី\\d{1,2}/,\n        ordinal : 'ទី%d',\n        preparse: function (string) {\n            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return km;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '೧',\n        '2': '೨',\n        '3': '೩',\n        '4': '೪',\n        '5': '೫',\n        '6': '೬',\n        '7': '೭',\n        '8': '೮',\n        '9': '೯',\n        '0': '೦'\n    },\n    numberMap = {\n        '೧': '1',\n        '೨': '2',\n        '೩': '3',\n        '೪': '4',\n        '೫': '5',\n        '೬': '6',\n        '೭': '7',\n        '೮': '8',\n        '೯': '9',\n        '೦': '0'\n    };\n\n    var kn = moment.defineLocale('kn', {\n        months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'),\n        monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'),\n        weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n        weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[ಇಂದು] LT',\n            nextDay : '[ನಾಳೆ] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[ನಿನ್ನೆ] LT',\n            lastWeek : '[ಕೊನೆಯ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ನಂತರ',\n            past : '%s ಹಿಂದೆ',\n            s : 'ಕೆಲವು ಕ್ಷಣಗಳು',\n            ss : '%d ಸೆಕೆಂಡುಗಳು',\n            m : 'ಒಂದು ನಿಮಿಷ',\n            mm : '%d ನಿಮಿಷ',\n            h : 'ಒಂದು ಗಂಟೆ',\n            hh : '%d ಗಂಟೆ',\n            d : 'ಒಂದು ದಿನ',\n            dd : '%d ದಿನ',\n            M : 'ಒಂದು ತಿಂಗಳು',\n            MM : '%d ತಿಂಗಳು',\n            y : 'ಒಂದು ವರ್ಷ',\n            yy : '%d ವರ್ಷ'\n        },\n        preparse: function (string) {\n            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ರಾತ್ರಿ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n                return hour;\n            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ಸಂಜೆ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ರಾತ್ರಿ';\n            } else if (hour < 10) {\n                return 'ಬೆಳಿಗ್ಗೆ';\n            } else if (hour < 17) {\n                return 'ಮಧ್ಯಾಹ್ನ';\n            } else if (hour < 20) {\n                return 'ಸಂಜೆ';\n            } else {\n                return 'ರಾತ್ರಿ';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n        ordinal : function (number) {\n            return number + 'ನೇ';\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return kn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ko = moment.defineLocale('ko', {\n        months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n        weekdaysShort : '일_월_화_수_목_금_토'.split('_'),\n        weekdaysMin : '일_월_화_수_목_금_토'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'YYYY.MM.DD.',\n            LL : 'YYYY년 MMMM D일',\n            LLL : 'YYYY년 MMMM D일 A h:mm',\n            LLLL : 'YYYY년 MMMM D일 dddd A h:mm',\n            l : 'YYYY.MM.DD.',\n            ll : 'YYYY년 MMMM D일',\n            lll : 'YYYY년 MMMM D일 A h:mm',\n            llll : 'YYYY년 MMMM D일 dddd A h:mm'\n        },\n        calendar : {\n            sameDay : '오늘 LT',\n            nextDay : '내일 LT',\n            nextWeek : 'dddd LT',\n            lastDay : '어제 LT',\n            lastWeek : '지난주 dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s 후',\n            past : '%s 전',\n            s : '몇 초',\n            ss : '%d초',\n            m : '1분',\n            mm : '%d분',\n            h : '한 시간',\n            hh : '%d시간',\n            d : '하루',\n            dd : '%d일',\n            M : '한 달',\n            MM : '%d달',\n            y : '일 년',\n            yy : '%d년'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(일|월|주)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '일';\n                case 'M':\n                    return number + '월';\n                case 'w':\n                case 'W':\n                    return number + '주';\n                default:\n                    return number;\n            }\n        },\n        meridiemParse : /오전|오후/,\n        isPM : function (token) {\n            return token === '오후';\n        },\n        meridiem : function (hour, minute, isUpper) {\n            return hour < 12 ? '오전' : '오후';\n        }\n    });\n\n    return ko;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '١',\n        '2': '٢',\n        '3': '٣',\n        '4': '٤',\n        '5': '٥',\n        '6': '٦',\n        '7': '٧',\n        '8': '٨',\n        '9': '٩',\n        '0': '٠'\n    }, numberMap = {\n        '١': '1',\n        '٢': '2',\n        '٣': '3',\n        '٤': '4',\n        '٥': '5',\n        '٦': '6',\n        '٧': '7',\n        '٨': '8',\n        '٩': '9',\n        '٠': '0'\n    },\n    months = [\n        'کانونی دووەم',\n        'شوبات',\n        'ئازار',\n        'نیسان',\n        'ئایار',\n        'حوزەیران',\n        'تەمموز',\n        'ئاب',\n        'ئەیلوول',\n        'تشرینی یەكەم',\n        'تشرینی دووەم',\n        'كانونی یەکەم'\n    ];\n\n\n    var ku = moment.defineLocale('ku', {\n        months : months,\n        monthsShort : months,\n        weekdays : 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split('_'),\n        weekdaysShort : 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split('_'),\n        weekdaysMin : 'ی_د_س_چ_پ_ه_ش'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ئێواره‌|به‌یانی/,\n        isPM: function (input) {\n            return /ئێواره‌/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'به‌یانی';\n            } else {\n                return 'ئێواره‌';\n            }\n        },\n        calendar : {\n            sameDay : '[ئه‌مرۆ كاتژمێر] LT',\n            nextDay : '[به‌یانی كاتژمێر] LT',\n            nextWeek : 'dddd [كاتژمێر] LT',\n            lastDay : '[دوێنێ كاتژمێر] LT',\n            lastWeek : 'dddd [كاتژمێر] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'له‌ %s',\n            past : '%s',\n            s : 'چه‌ند چركه‌یه‌ك',\n            ss : 'چركه‌ %d',\n            m : 'یه‌ك خوله‌ك',\n            mm : '%d خوله‌ك',\n            h : 'یه‌ك كاتژمێر',\n            hh : '%d كاتژمێر',\n            d : 'یه‌ك ڕۆژ',\n            dd : '%d ڕۆژ',\n            M : 'یه‌ك مانگ',\n            MM : '%d مانگ',\n            y : 'یه‌ك ساڵ',\n            yy : '%d ساڵ'\n        },\n        preparse: function (string) {\n            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12 // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return ku;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-чү',\n        1: '-чи',\n        2: '-чи',\n        3: '-чү',\n        4: '-чү',\n        5: '-чи',\n        6: '-чы',\n        7: '-чи',\n        8: '-чи',\n        9: '-чу',\n        10: '-чу',\n        20: '-чы',\n        30: '-чу',\n        40: '-чы',\n        50: '-чү',\n        60: '-чы',\n        70: '-чи',\n        80: '-чи',\n        90: '-чу',\n        100: '-чү'\n    };\n\n    var ky = moment.defineLocale('ky', {\n        months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),\n        monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),\n        weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n        weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бүгүн саат] LT',\n            nextDay : '[Эртең саат] LT',\n            nextWeek : 'dddd [саат] LT',\n            lastDay : '[Кечээ саат] LT',\n            lastWeek : '[Өткөн аптанын] dddd [күнү] [саат] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ичинде',\n            past : '%s мурун',\n            s : 'бирнече секунд',\n            ss : '%d секунд',\n            m : 'бир мүнөт',\n            mm : '%d мүнөт',\n            h : 'бир саат',\n            hh : '%d саат',\n            d : 'бир күн',\n            dd : '%d күн',\n            M : 'бир ай',\n            MM : '%d ай',\n            y : 'бир жыл',\n            yy : '%d жыл'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n        ordinal : function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return ky;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eng Minutt', 'enger Minutt'],\n            'h': ['eng Stonn', 'enger Stonn'],\n            'd': ['een Dag', 'engem Dag'],\n            'M': ['ee Mount', 'engem Mount'],\n            'y': ['ee Joer', 'engem Joer']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n    function processFutureTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'a ' + string;\n        }\n        return 'an ' + string;\n    }\n    function processPastTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'viru ' + string;\n        }\n        return 'virun ' + string;\n    }\n    /**\n     * Returns true if the word before the given number loses the '-n' ending.\n     * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n     *\n     * @param number {integer}\n     * @returns {boolean}\n     */\n    function eifelerRegelAppliesToNumber(number) {\n        number = parseInt(number, 10);\n        if (isNaN(number)) {\n            return false;\n        }\n        if (number < 0) {\n            // Negative Number --> always true\n            return true;\n        } else if (number < 10) {\n            // Only 1 digit\n            if (4 <= number && number <= 7) {\n                return true;\n            }\n            return false;\n        } else if (number < 100) {\n            // 2 digits\n            var lastDigit = number % 10, firstDigit = number / 10;\n            if (lastDigit === 0) {\n                return eifelerRegelAppliesToNumber(firstDigit);\n            }\n            return eifelerRegelAppliesToNumber(lastDigit);\n        } else if (number < 10000) {\n            // 3 or 4 digits --> recursively check first digit\n            while (number >= 10) {\n                number = number / 10;\n            }\n            return eifelerRegelAppliesToNumber(number);\n        } else {\n            // Anything larger than 4 digits: recursively check first n-3 digits\n            number = number / 1000;\n            return eifelerRegelAppliesToNumber(number);\n        }\n    }\n\n    var lb = moment.defineLocale('lb', {\n        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),\n        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm [Auer]',\n            LTS: 'H:mm:ss [Auer]',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm [Auer]',\n            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'\n        },\n        calendar: {\n            sameDay: '[Haut um] LT',\n            sameElse: 'L',\n            nextDay: '[Muer um] LT',\n            nextWeek: 'dddd [um] LT',\n            lastDay: '[Gëschter um] LT',\n            lastWeek: function () {\n                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n                switch (this.day()) {\n                    case 2:\n                    case 4:\n                        return '[Leschten] dddd [um] LT';\n                    default:\n                        return '[Leschte] dddd [um] LT';\n                }\n            }\n        },\n        relativeTime : {\n            future : processFutureTime,\n            past : processPastTime,\n            s : 'e puer Sekonnen',\n            ss : '%d Sekonnen',\n            m : processRelativeTime,\n            mm : '%d Minutten',\n            h : processRelativeTime,\n            hh : '%d Stonnen',\n            d : processRelativeTime,\n            dd : '%d Deeg',\n            M : processRelativeTime,\n            MM : '%d Méint',\n            y : processRelativeTime,\n            yy : '%d Joer'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lb;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var lo = moment.defineLocale('lo', {\n        months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n        monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n        weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'ວັນdddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n        isPM: function (input) {\n            return input === 'ຕອນແລງ';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ຕອນເຊົ້າ';\n            } else {\n                return 'ຕອນແລງ';\n            }\n        },\n        calendar : {\n            sameDay : '[ມື້ນີ້ເວລາ] LT',\n            nextDay : '[ມື້ອື່ນເວລາ] LT',\n            nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',\n            lastDay : '[ມື້ວານນີ້ເວລາ] LT',\n            lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ອີກ %s',\n            past : '%sຜ່ານມາ',\n            s : 'ບໍ່ເທົ່າໃດວິນາທີ',\n            ss : '%d ວິນາທີ' ,\n            m : '1 ນາທີ',\n            mm : '%d ນາທີ',\n            h : '1 ຊົ່ວໂມງ',\n            hh : '%d ຊົ່ວໂມງ',\n            d : '1 ມື້',\n            dd : '%d ມື້',\n            M : '1 ເດືອນ',\n            MM : '%d ເດືອນ',\n            y : '1 ປີ',\n            yy : '%d ປີ'\n        },\n        dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n        ordinal : function (number) {\n            return 'ທີ່' + number;\n        }\n    });\n\n    return lo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var units = {\n        'ss' : 'sekundė_sekundžių_sekundes',\n        'm' : 'minutė_minutės_minutę',\n        'mm': 'minutės_minučių_minutes',\n        'h' : 'valanda_valandos_valandą',\n        'hh': 'valandos_valandų_valandas',\n        'd' : 'diena_dienos_dieną',\n        'dd': 'dienos_dienų_dienas',\n        'M' : 'mėnuo_mėnesio_mėnesį',\n        'MM': 'mėnesiai_mėnesių_mėnesius',\n        'y' : 'metai_metų_metus',\n        'yy': 'metai_metų_metus'\n    };\n    function translateSeconds(number, withoutSuffix, key, isFuture) {\n        if (withoutSuffix) {\n            return 'kelios sekundės';\n        } else {\n            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n        }\n    }\n    function translateSingular(number, withoutSuffix, key, isFuture) {\n        return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);\n    }\n    function special(number) {\n        return number % 10 === 0 || (number > 10 && number < 20);\n    }\n    function forms(key) {\n        return units[key].split('_');\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        if (number === 1) {\n            return result + translateSingular(number, withoutSuffix, key[0], isFuture);\n        } else if (withoutSuffix) {\n            return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n        } else {\n            if (isFuture) {\n                return result + forms(key)[1];\n            } else {\n                return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n            }\n        }\n    }\n    var lt = moment.defineLocale('lt', {\n        months : {\n            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),\n            standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),\n            isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/\n        },\n        monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n        weekdays : {\n            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),\n            standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),\n            isFormat: /dddd HH:mm/\n        },\n        weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n        weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY [m.] MMMM D [d.]',\n            LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n            l : 'YYYY-MM-DD',\n            ll : 'YYYY [m.] MMMM D [d.]',\n            lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'\n        },\n        calendar : {\n            sameDay : '[Šiandien] LT',\n            nextDay : '[Rytoj] LT',\n            nextWeek : 'dddd LT',\n            lastDay : '[Vakar] LT',\n            lastWeek : '[Praėjusį] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'po %s',\n            past : 'prieš %s',\n            s : translateSeconds,\n            ss : translate,\n            m : translateSingular,\n            mm : translate,\n            h : translateSingular,\n            hh : translate,\n            d : translateSingular,\n            dd : translate,\n            M : translateSingular,\n            MM : translate,\n            y : translateSingular,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n        ordinal : function (number) {\n            return number + '-oji';\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var units = {\n        'ss': 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n        'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        'h': 'stundas_stundām_stunda_stundas'.split('_'),\n        'hh': 'stundas_stundām_stunda_stundas'.split('_'),\n        'd': 'dienas_dienām_diena_dienas'.split('_'),\n        'dd': 'dienas_dienām_diena_dienas'.split('_'),\n        'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        'y': 'gada_gadiem_gads_gadi'.split('_'),\n        'yy': 'gada_gadiem_gads_gadi'.split('_')\n    };\n    /**\n     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n     */\n    function format(forms, number, withoutSuffix) {\n        if (withoutSuffix) {\n            // E.g. \"21 minūte\", \"3 minūtes\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n        } else {\n            // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n            // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n        }\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        return number + ' ' + format(units[key], number, withoutSuffix);\n    }\n    function relativeTimeWithSingular(number, withoutSuffix, key) {\n        return format(units[key], number, withoutSuffix);\n    }\n    function relativeSeconds(number, withoutSuffix) {\n        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n    }\n\n    var lv = moment.defineLocale('lv', {\n        months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),\n        weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY.',\n            LL : 'YYYY. [gada] D. MMMM',\n            LLL : 'YYYY. [gada] D. MMMM, HH:mm',\n            LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'\n        },\n        calendar : {\n            sameDay : '[Šodien pulksten] LT',\n            nextDay : '[Rīt pulksten] LT',\n            nextWeek : 'dddd [pulksten] LT',\n            lastDay : '[Vakar pulksten] LT',\n            lastWeek : '[Pagājušā] dddd [pulksten] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'pēc %s',\n            past : 'pirms %s',\n            s : relativeSeconds,\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithSingular,\n            mm : relativeTimeWithPlural,\n            h : relativeTimeWithSingular,\n            hh : relativeTimeWithPlural,\n            d : relativeTimeWithSingular,\n            dd : relativeTimeWithPlural,\n            M : relativeTimeWithSingular,\n            MM : relativeTimeWithPlural,\n            y : relativeTimeWithSingular,\n            yy : relativeTimeWithPlural\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['sekund', 'sekunda', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mjesec', 'mjeseca', 'mjeseci'],\n            yy: ['godina', 'godine', 'godina']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var me = moment.defineLocale('me', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact : true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sjutra u] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[juče u] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[prošle] [nedjelje] [u] LT',\n                    '[prošlog] [ponedjeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srijede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'nekoliko sekundi',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'dan',\n            dd     : translator.translate,\n            M      : 'mjesec',\n            MM     : translator.translate,\n            y      : 'godinu',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return me;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var mi = moment.defineLocale('mi', {\n        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),\n        monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),\n        monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [i] HH:mm',\n            LLLL: 'dddd, D MMMM YYYY [i] HH:mm'\n        },\n        calendar: {\n            sameDay: '[i teie mahana, i] LT',\n            nextDay: '[apopo i] LT',\n            nextWeek: 'dddd [i] LT',\n            lastDay: '[inanahi i] LT',\n            lastWeek: 'dddd [whakamutunga i] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'i roto i %s',\n            past: '%s i mua',\n            s: 'te hēkona ruarua',\n            ss: '%d hēkona',\n            m: 'he meneti',\n            mm: '%d meneti',\n            h: 'te haora',\n            hh: '%d haora',\n            d: 'he ra',\n            dd: '%d ra',\n            M: 'he marama',\n            MM: '%d marama',\n            y: 'he tau',\n            yy: '%d tau'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return mi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var mk = moment.defineLocale('mk', {\n        months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),\n        monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),\n        weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n        weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'D.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay : '[Денес во] LT',\n            nextDay : '[Утре во] LT',\n            nextWeek : '[Во] dddd [во] LT',\n            lastDay : '[Вчера во] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Изминатата] dddd [во] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Изминатиот] dddd [во] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'после %s',\n            past : 'пред %s',\n            s : 'неколку секунди',\n            ss : '%d секунди',\n            m : 'минута',\n            mm : '%d минути',\n            h : 'час',\n            hh : '%d часа',\n            d : 'ден',\n            dd : '%d дена',\n            M : 'месец',\n            MM : '%d месеци',\n            y : 'година',\n            yy : '%d години'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal : function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return mk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ml = moment.defineLocale('ml', {\n        months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),\n        monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),\n        weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n        weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm -നു',\n            LTS : 'A h:mm:ss -നു',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm -നു',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'\n        },\n        calendar : {\n            sameDay : '[ഇന്ന്] LT',\n            nextDay : '[നാളെ] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[ഇന്നലെ] LT',\n            lastWeek : '[കഴിഞ്ഞ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s കഴിഞ്ഞ്',\n            past : '%s മുൻപ്',\n            s : 'അൽപ നിമിഷങ്ങൾ',\n            ss : '%d സെക്കൻഡ്',\n            m : 'ഒരു മിനിറ്റ്',\n            mm : '%d മിനിറ്റ്',\n            h : 'ഒരു മണിക്കൂർ',\n            hh : '%d മണിക്കൂർ',\n            d : 'ഒരു ദിവസം',\n            dd : '%d ദിവസം',\n            M : 'ഒരു മാസം',\n            MM : '%d മാസം',\n            y : 'ഒരു വർഷം',\n            yy : '%d വർഷം'\n        },\n        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'രാത്രി' && hour >= 4) ||\n                    meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n                    meridiem === 'വൈകുന്നേരം') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'രാത്രി';\n            } else if (hour < 12) {\n                return 'രാവിലെ';\n            } else if (hour < 17) {\n                return 'ഉച്ച കഴിഞ്ഞ്';\n            } else if (hour < 20) {\n                return 'വൈകുന്നേരം';\n            } else {\n                return 'രാത്രി';\n            }\n        }\n    });\n\n    return ml;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key, isFuture) {\n        switch (key) {\n            case 's':\n                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n            case 'ss':\n                return number + (withoutSuffix ? ' секунд' : ' секундын');\n            case 'm':\n            case 'mm':\n                return number + (withoutSuffix ? ' минут' : ' минутын');\n            case 'h':\n            case 'hh':\n                return number + (withoutSuffix ? ' цаг' : ' цагийн');\n            case 'd':\n            case 'dd':\n                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n            case 'M':\n            case 'MM':\n                return number + (withoutSuffix ? ' сар' : ' сарын');\n            case 'y':\n            case 'yy':\n                return number + (withoutSuffix ? ' жил' : ' жилийн');\n            default:\n                return number;\n        }\n    }\n\n    var mn = moment.defineLocale('mn', {\n        months : 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split('_'),\n        monthsShort : '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n        weekdaysShort : 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n        weekdaysMin : 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY оны MMMMын D',\n            LLL : 'YYYY оны MMMMын D HH:mm',\n            LLLL : 'dddd, YYYY оны MMMMын D HH:mm'\n        },\n        meridiemParse: /ҮӨ|ҮХ/i,\n        isPM : function (input) {\n            return input === 'ҮХ';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ҮӨ';\n            } else {\n                return 'ҮХ';\n            }\n        },\n        calendar : {\n            sameDay : '[Өнөөдөр] LT',\n            nextDay : '[Маргааш] LT',\n            nextWeek : '[Ирэх] dddd LT',\n            lastDay : '[Өчигдөр] LT',\n            lastWeek : '[Өнгөрсөн] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s дараа',\n            past : '%s өмнө',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + ' өдөр';\n                default:\n                    return number;\n            }\n        }\n    });\n\n    return mn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    function relativeTimeMr(number, withoutSuffix, string, isFuture)\n    {\n        var output = '';\n        if (withoutSuffix) {\n            switch (string) {\n                case 's': output = 'काही सेकंद'; break;\n                case 'ss': output = '%d सेकंद'; break;\n                case 'm': output = 'एक मिनिट'; break;\n                case 'mm': output = '%d मिनिटे'; break;\n                case 'h': output = 'एक तास'; break;\n                case 'hh': output = '%d तास'; break;\n                case 'd': output = 'एक दिवस'; break;\n                case 'dd': output = '%d दिवस'; break;\n                case 'M': output = 'एक महिना'; break;\n                case 'MM': output = '%d महिने'; break;\n                case 'y': output = 'एक वर्ष'; break;\n                case 'yy': output = '%d वर्षे'; break;\n            }\n        }\n        else {\n            switch (string) {\n                case 's': output = 'काही सेकंदां'; break;\n                case 'ss': output = '%d सेकंदां'; break;\n                case 'm': output = 'एका मिनिटा'; break;\n                case 'mm': output = '%d मिनिटां'; break;\n                case 'h': output = 'एका तासा'; break;\n                case 'hh': output = '%d तासां'; break;\n                case 'd': output = 'एका दिवसा'; break;\n                case 'dd': output = '%d दिवसां'; break;\n                case 'M': output = 'एका महिन्या'; break;\n                case 'MM': output = '%d महिन्यां'; break;\n                case 'y': output = 'एका वर्षा'; break;\n                case 'yy': output = '%d वर्षां'; break;\n            }\n        }\n        return output.replace(/%d/i, number);\n    }\n\n    var mr = moment.defineLocale('mr', {\n        months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),\n        monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm वाजता',\n            LTS : 'A h:mm:ss वाजता',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm वाजता',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[उद्या] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[काल] LT',\n            lastWeek: '[मागील] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future: '%sमध्ये',\n            past: '%sपूर्वी',\n            s: relativeTimeMr,\n            ss: relativeTimeMr,\n            m: relativeTimeMr,\n            mm: relativeTimeMr,\n            h: relativeTimeMr,\n            hh: relativeTimeMr,\n            d: relativeTimeMr,\n            dd: relativeTimeMr,\n            M: relativeTimeMr,\n            MM: relativeTimeMr,\n            y: relativeTimeMr,\n            yy: relativeTimeMr\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात्री') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सकाळी') {\n                return hour;\n            } else if (meridiem === 'दुपारी') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'सायंकाळी') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात्री';\n            } else if (hour < 10) {\n                return 'सकाळी';\n            } else if (hour < 17) {\n                return 'दुपारी';\n            } else if (hour < 20) {\n                return 'सायंकाळी';\n            } else {\n                return 'रात्री';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return mr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ms = moment.defineLocale('ms', {\n        months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Esok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kelmarin pukul] LT',\n            lastWeek : 'dddd [lepas pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lepas',\n            s : 'beberapa saat',\n            ss : '%d saat',\n            m : 'seminit',\n            mm : '%d minit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return ms;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var msMy = moment.defineLocale('ms-my', {\n        months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Esok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kelmarin pukul] LT',\n            lastWeek : 'dddd [lepas pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lepas',\n            s : 'beberapa saat',\n            ss : '%d saat',\n            m : 'seminit',\n            mm : '%d minit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return msMy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var mt = moment.defineLocale('mt', {\n        months : 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split('_'),\n        monthsShort : 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n        weekdays : 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split('_'),\n        weekdaysShort : 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n        weekdaysMin : 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Illum fil-]LT',\n            nextDay : '[Għada fil-]LT',\n            nextWeek : 'dddd [fil-]LT',\n            lastDay : '[Il-bieraħ fil-]LT',\n            lastWeek : 'dddd [li għadda] [fil-]LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'f’ %s',\n            past : '%s ilu',\n            s : 'ftit sekondi',\n            ss : '%d sekondi',\n            m : 'minuta',\n            mm : '%d minuti',\n            h : 'siegħa',\n            hh : '%d siegħat',\n            d : 'ġurnata',\n            dd : '%d ġranet',\n            M : 'xahar',\n            MM : '%d xhur',\n            y : 'sena',\n            yy : '%d sni'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return mt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '၁',\n        '2': '၂',\n        '3': '၃',\n        '4': '၄',\n        '5': '၅',\n        '6': '၆',\n        '7': '၇',\n        '8': '၈',\n        '9': '၉',\n        '0': '၀'\n    }, numberMap = {\n        '၁': '1',\n        '၂': '2',\n        '၃': '3',\n        '၄': '4',\n        '၅': '5',\n        '၆': '6',\n        '၇': '7',\n        '၈': '8',\n        '၉': '9',\n        '၀': '0'\n    };\n\n    var my = moment.defineLocale('my', {\n        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),\n        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),\n        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[ယနေ.] LT [မှာ]',\n            nextDay: '[မနက်ဖြန်] LT [မှာ]',\n            nextWeek: 'dddd LT [မှာ]',\n            lastDay: '[မနေ.က] LT [မှာ]',\n            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'လာမည့် %s မှာ',\n            past: 'လွန်ခဲ့သော %s က',\n            s: 'စက္ကန်.အနည်းငယ်',\n            ss : '%d စက္ကန့်',\n            m: 'တစ်မိနစ်',\n            mm: '%d မိနစ်',\n            h: 'တစ်နာရီ',\n            hh: '%d နာရီ',\n            d: 'တစ်ရက်',\n            dd: '%d ရက်',\n            M: 'တစ်လ',\n            MM: '%d လ',\n            y: 'တစ်နှစ်',\n            yy: '%d နှစ်'\n        },\n        preparse: function (string) {\n            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return my;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var nb = moment.defineLocale('nb', {\n        months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n        weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] HH:mm',\n            LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[forrige] dddd [kl.] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s siden',\n            s : 'noen sekunder',\n            ss : '%d sekunder',\n            m : 'ett minutt',\n            mm : '%d minutter',\n            h : 'en time',\n            hh : '%d timer',\n            d : 'en dag',\n            dd : '%d dager',\n            M : 'en måned',\n            MM : '%d måneder',\n            y : 'ett år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nb;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    var ne = moment.defineLocale('ne', {\n        months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),\n        monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),\n        weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n        weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'Aको h:mm बजे',\n            LTS : 'Aको h:mm:ss बजे',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, Aको h:mm बजे',\n            LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राति') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'बिहान') {\n                return hour;\n            } else if (meridiem === 'दिउँसो') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'साँझ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 3) {\n                return 'राति';\n            } else if (hour < 12) {\n                return 'बिहान';\n            } else if (hour < 16) {\n                return 'दिउँसो';\n            } else if (hour < 20) {\n                return 'साँझ';\n            } else {\n                return 'राति';\n            }\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[भोलि] LT',\n            nextWeek : '[आउँदो] dddd[,] LT',\n            lastDay : '[हिजो] LT',\n            lastWeek : '[गएको] dddd[,] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%sमा',\n            past : '%s अगाडि',\n            s : 'केही क्षण',\n            ss : '%d सेकेण्ड',\n            m : 'एक मिनेट',\n            mm : '%d मिनेट',\n            h : 'एक घण्टा',\n            hh : '%d घण्टा',\n            d : 'एक दिन',\n            dd : '%d दिन',\n            M : 'एक महिना',\n            MM : '%d महिना',\n            y : 'एक बर्ष',\n            yy : '%d बर्ष'\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return ne;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n    var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n    var monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nl = moment.defineLocale('nl', {\n        months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'over %s',\n            past : '%s geleden',\n            s : 'een paar seconden',\n            ss : '%d seconden',\n            m : 'één minuut',\n            mm : '%d minuten',\n            h : 'één uur',\n            hh : '%d uur',\n            d : 'één dag',\n            dd : '%d dagen',\n            M : 'één maand',\n            MM : '%d maanden',\n            y : 'één jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n    var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n    var monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nlBe = moment.defineLocale('nl-be', {\n        months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'over %s',\n            past : '%s geleden',\n            s : 'een paar seconden',\n            ss : '%d seconden',\n            m : 'één minuut',\n            mm : '%d minuten',\n            h : 'één uur',\n            hh : '%d uur',\n            d : 'één dag',\n            dd : '%d dagen',\n            M : 'één maand',\n            MM : '%d maanden',\n            y : 'één jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nlBe;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var nn = moment.defineLocale('nn', {\n        months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n        weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),\n        weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] H:mm',\n            LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[I dag klokka] LT',\n            nextDay: '[I morgon klokka] LT',\n            nextWeek: 'dddd [klokka] LT',\n            lastDay: '[I går klokka] LT',\n            lastWeek: '[Føregåande] dddd [klokka] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s sidan',\n            s : 'nokre sekund',\n            ss : '%d sekund',\n            m : 'eit minutt',\n            mm : '%d minutt',\n            h : 'ein time',\n            hh : '%d timar',\n            d : 'ein dag',\n            dd : '%d dagar',\n            M : 'ein månad',\n            MM : '%d månader',\n            y : 'eit år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '੧',\n        '2': '੨',\n        '3': '੩',\n        '4': '੪',\n        '5': '੫',\n        '6': '੬',\n        '7': '੭',\n        '8': '੮',\n        '9': '੯',\n        '0': '੦'\n    },\n    numberMap = {\n        '੧': '1',\n        '੨': '2',\n        '੩': '3',\n        '੪': '4',\n        '੫': '5',\n        '੬': '6',\n        '੭': '7',\n        '੮': '8',\n        '੯': '9',\n        '੦': '0'\n    };\n\n    var paIn = moment.defineLocale('pa-in', {\n        // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n        months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n        monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n        weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),\n        weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm ਵਜੇ',\n            LTS : 'A h:mm:ss ਵਜੇ',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'\n        },\n        calendar : {\n            sameDay : '[ਅਜ] LT',\n            nextDay : '[ਕਲ] LT',\n            nextWeek : '[ਅਗਲਾ] dddd, LT',\n            lastDay : '[ਕਲ] LT',\n            lastWeek : '[ਪਿਛਲੇ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ਵਿੱਚ',\n            past : '%s ਪਿਛਲੇ',\n            s : 'ਕੁਝ ਸਕਿੰਟ',\n            ss : '%d ਸਕਿੰਟ',\n            m : 'ਇਕ ਮਿੰਟ',\n            mm : '%d ਮਿੰਟ',\n            h : 'ਇੱਕ ਘੰਟਾ',\n            hh : '%d ਘੰਟੇ',\n            d : 'ਇੱਕ ਦਿਨ',\n            dd : '%d ਦਿਨ',\n            M : 'ਇੱਕ ਮਹੀਨਾ',\n            MM : '%d ਮਹੀਨੇ',\n            y : 'ਇੱਕ ਸਾਲ',\n            yy : '%d ਸਾਲ'\n        },\n        preparse: function (string) {\n            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ਰਾਤ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ਸਵੇਰ') {\n                return hour;\n            } else if (meridiem === 'ਦੁਪਹਿਰ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ਸ਼ਾਮ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ਰਾਤ';\n            } else if (hour < 10) {\n                return 'ਸਵੇਰ';\n            } else if (hour < 17) {\n                return 'ਦੁਪਹਿਰ';\n            } else if (hour < 20) {\n                return 'ਸ਼ਾਮ';\n            } else {\n                return 'ਰਾਤ';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return paIn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),\n        monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');\n    function plural(n) {\n        return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);\n    }\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                return result + (plural(number) ? 'sekundy' : 'sekund');\n            case 'm':\n                return withoutSuffix ? 'minuta' : 'minutę';\n            case 'mm':\n                return result + (plural(number) ? 'minuty' : 'minut');\n            case 'h':\n                return withoutSuffix  ? 'godzina'  : 'godzinę';\n            case 'hh':\n                return result + (plural(number) ? 'godziny' : 'godzin');\n            case 'MM':\n                return result + (plural(number) ? 'miesiące' : 'miesięcy');\n            case 'yy':\n                return result + (plural(number) ? 'lata' : 'lat');\n        }\n    }\n\n    var pl = moment.defineLocale('pl', {\n        months : function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return monthsNominative;\n            } else if (format === '') {\n                // Hack: if format empty we know this is used to generate\n                // RegExp by moment. Give then back both valid forms of months\n                // in RegExp ready format.\n                return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';\n            } else if (/D MMMM/.test(format)) {\n                return monthsSubjective[momentToFormat.month()];\n            } else {\n                return monthsNominative[momentToFormat.month()];\n            }\n        },\n        monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n        weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n        weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n        weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Dziś o] LT',\n            nextDay: '[Jutro o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W niedzielę o] LT';\n\n                    case 2:\n                        return '[We wtorek o] LT';\n\n                    case 3:\n                        return '[W środę o] LT';\n\n                    case 6:\n                        return '[W sobotę o] LT';\n\n                    default:\n                        return '[W] dddd [o] LT';\n                }\n            },\n            lastDay: '[Wczoraj o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W zeszłą niedzielę o] LT';\n                    case 3:\n                        return '[W zeszłą środę o] LT';\n                    case 6:\n                        return '[W zeszłą sobotę o] LT';\n                    default:\n                        return '[W zeszły] dddd [o] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : '%s temu',\n            s : 'kilka sekund',\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : '1 dzień',\n            dd : '%d dni',\n            M : 'miesiąc',\n            MM : translate,\n            y : 'rok',\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return pl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var pt = moment.defineLocale('pt', {\n        months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY HH:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return (this.day() === 0 || this.day() === 6) ?\n                    '[Último] dddd [às] LT' : // Saturday + Sunday\n                    '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'em %s',\n            past : 'há %s',\n            s : 'segundos',\n            ss : '%d segundos',\n            m : 'um minuto',\n            mm : '%d minutos',\n            h : 'uma hora',\n            hh : '%d horas',\n            d : 'um dia',\n            dd : '%d dias',\n            M : 'um mês',\n            MM : '%d meses',\n            y : 'um ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return pt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ptBr = moment.defineLocale('pt-br', {\n        months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return (this.day() === 0 || this.day() === 6) ?\n                    '[Último] dddd [às] LT' : // Saturday + Sunday\n                    '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'em %s',\n            past : 'há %s',\n            s : 'poucos segundos',\n            ss : '%d segundos',\n            m : 'um minuto',\n            mm : '%d minutos',\n            h : 'uma hora',\n            hh : '%d horas',\n            d : 'um dia',\n            dd : '%d dias',\n            M : 'um mês',\n            MM : '%d meses',\n            y : 'um ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal : '%dº'\n    });\n\n    return ptBr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n                'ss': 'secunde',\n                'mm': 'minute',\n                'hh': 'ore',\n                'dd': 'zile',\n                'MM': 'luni',\n                'yy': 'ani'\n            },\n            separator = ' ';\n        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n            separator = ' de ';\n        }\n        return number + separator + format[key];\n    }\n\n    var ro = moment.defineLocale('ro', {\n        months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),\n        monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n        weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n        weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay: '[azi la] LT',\n            nextDay: '[mâine la] LT',\n            nextWeek: 'dddd [la] LT',\n            lastDay: '[ieri la] LT',\n            lastWeek: '[fosta] dddd [la] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'peste %s',\n            past : '%s în urmă',\n            s : 'câteva secunde',\n            ss : relativeTimeWithPlural,\n            m : 'un minut',\n            mm : relativeTimeWithPlural,\n            h : 'o oră',\n            hh : relativeTimeWithPlural,\n            d : 'o zi',\n            dd : relativeTimeWithPlural,\n            M : 'o lună',\n            MM : relativeTimeWithPlural,\n            y : 'un an',\n            yy : relativeTimeWithPlural\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return ro;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n            'hh': 'час_часа_часов',\n            'dd': 'день_дня_дней',\n            'MM': 'месяц_месяца_месяцев',\n            'yy': 'год_года_лет'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'минута' : 'минуту';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];\n\n    // http://new.gramota.ru/spravka/rules/139-prop : § 103\n    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n    var ru = moment.defineLocale('ru', {\n        months : {\n            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),\n            standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')\n        },\n        monthsShort : {\n            // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку ?\n            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),\n            standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')\n        },\n        weekdays : {\n            standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),\n            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),\n            isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\\] ?dddd/\n        },\n        weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n        monthsRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // копия предыдущего\n        monthsShortRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // полные названия с падежами\n        monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n        // Выражение, которое соотвествует только сокращённым формам\n        monthsShortStrictRegex: /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY г.',\n            LLL : 'D MMMM YYYY г., H:mm',\n            LLLL : 'dddd, D MMMM YYYY г., H:mm'\n        },\n        calendar : {\n            sameDay: '[Сегодня, в] LT',\n            nextDay: '[Завтра, в] LT',\n            lastDay: '[Вчера, в] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В следующее] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В следующий] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В следующую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            lastWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В прошлое] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В прошлый] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В прошлую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'через %s',\n            past : '%s назад',\n            s : 'несколько секунд',\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : 'час',\n            hh : relativeTimeWithPlural,\n            d : 'день',\n            dd : relativeTimeWithPlural,\n            M : 'месяц',\n            MM : relativeTimeWithPlural,\n            y : 'год',\n            yy : relativeTimeWithPlural\n        },\n        meridiemParse: /ночи|утра|дня|вечера/i,\n        isPM : function (input) {\n            return /^(дня|вечера)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночи';\n            } else if (hour < 12) {\n                return 'утра';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечера';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                case 'w':\n                case 'W':\n                    return number + '-я';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ru;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'جنوري',\n        'فيبروري',\n        'مارچ',\n        'اپريل',\n        'مئي',\n        'جون',\n        'جولاءِ',\n        'آگسٽ',\n        'سيپٽمبر',\n        'آڪٽوبر',\n        'نومبر',\n        'ڊسمبر'\n    ];\n    var days = [\n        'آچر',\n        'سومر',\n        'اڱارو',\n        'اربع',\n        'خميس',\n        'جمع',\n        'ڇنڇر'\n    ];\n\n    var sd = moment.defineLocale('sd', {\n        months : months,\n        monthsShort : months,\n        weekdays : days,\n        weekdaysShort : days,\n        weekdaysMin : days,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd، D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /صبح|شام/,\n        isPM : function (input) {\n            return 'شام' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar : {\n            sameDay : '[اڄ] LT',\n            nextDay : '[سڀاڻي] LT',\n            nextWeek : 'dddd [اڳين هفتي تي] LT',\n            lastDay : '[ڪالهه] LT',\n            lastWeek : '[گزريل هفتي] dddd [تي] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s پوء',\n            past : '%s اڳ',\n            s : 'چند سيڪنڊ',\n            ss : '%d سيڪنڊ',\n            m : 'هڪ منٽ',\n            mm : '%d منٽ',\n            h : 'هڪ ڪلاڪ',\n            hh : '%d ڪلاڪ',\n            d : 'هڪ ڏينهن',\n            dd : '%d ڏينهن',\n            M : 'هڪ مهينو',\n            MM : '%d مهينا',\n            y : 'هڪ سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sd;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var se = moment.defineLocale('se', {\n        months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),\n        monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n        weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),\n        weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n        weekdaysMin : 's_v_m_g_d_b_L'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'MMMM D. [b.] YYYY',\n            LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',\n            LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[otne ti] LT',\n            nextDay: '[ihttin ti] LT',\n            nextWeek: 'dddd [ti] LT',\n            lastDay: '[ikte ti] LT',\n            lastWeek: '[ovddit] dddd [ti] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s geažes',\n            past : 'maŋit %s',\n            s : 'moadde sekunddat',\n            ss: '%d sekunddat',\n            m : 'okta minuhta',\n            mm : '%d minuhtat',\n            h : 'okta diimmu',\n            hh : '%d diimmut',\n            d : 'okta beaivi',\n            dd : '%d beaivvit',\n            M : 'okta mánnu',\n            MM : '%d mánut',\n            y : 'okta jahki',\n            yy : '%d jagit'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return se;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    /*jshint -W100*/\n    var si = moment.defineLocale('si', {\n        months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),\n        monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),\n        weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),\n        weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n        weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'a h:mm',\n            LTS : 'a h:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY MMMM D',\n            LLL : 'YYYY MMMM D, a h:mm',\n            LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'\n        },\n        calendar : {\n            sameDay : '[අද] LT[ට]',\n            nextDay : '[හෙට] LT[ට]',\n            nextWeek : 'dddd LT[ට]',\n            lastDay : '[ඊයේ] LT[ට]',\n            lastWeek : '[පසුගිය] dddd LT[ට]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%sකින්',\n            past : '%sකට පෙර',\n            s : 'තත්පර කිහිපය',\n            ss : 'තත්පර %d',\n            m : 'මිනිත්තුව',\n            mm : 'මිනිත්තු %d',\n            h : 'පැය',\n            hh : 'පැය %d',\n            d : 'දිනය',\n            dd : 'දින %d',\n            M : 'මාසය',\n            MM : 'මාස %d',\n            y : 'වසර',\n            yy : 'වසර %d'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n        ordinal : function (number) {\n            return number + ' වැනි';\n        },\n        meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n        isPM : function (input) {\n            return input === 'ප.ව.' || input === 'පස් වරු';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'ප.ව.' : 'පස් වරු';\n            } else {\n                return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n            }\n        }\n    });\n\n    return si;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),\n        monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n    function plural(n) {\n        return (n > 1) && (n < 5);\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':  // a few seconds / in a few seconds / a few seconds ago\n                return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekúnd');\n                } else {\n                    return result + 'sekundami';\n                }\n                break;\n            case 'm':  // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minúty' : 'minút');\n                } else {\n                    return result + 'minútami';\n                }\n                break;\n            case 'h':  // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodín');\n                } else {\n                    return result + 'hodinami';\n                }\n                break;\n            case 'd':  // a day / in a day / a day ago\n                return (withoutSuffix || isFuture) ? 'deň' : 'dňom';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dni' : 'dní');\n                } else {\n                    return result + 'dňami';\n                }\n                break;\n            case 'M':  // a month / in a month / a month ago\n                return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'mesiace' : 'mesiacov');\n                } else {\n                    return result + 'mesiacmi';\n                }\n                break;\n            case 'y':  // a year / in a year / a year ago\n                return (withoutSuffix || isFuture) ? 'rok' : 'rokom';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'rokov');\n                } else {\n                    return result + 'rokmi';\n                }\n                break;\n        }\n    }\n\n    var sk = moment.defineLocale('sk', {\n        months : months,\n        monthsShort : monthsShort,\n        weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n        weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),\n        weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),\n        longDateFormat : {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay: '[dnes o] LT',\n            nextDay: '[zajtra o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [o] LT';\n                    case 3:\n                        return '[v stredu o] LT';\n                    case 4:\n                        return '[vo štvrtok o] LT';\n                    case 5:\n                        return '[v piatok o] LT';\n                    case 6:\n                        return '[v sobotu o] LT';\n                }\n            },\n            lastDay: '[včera o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulú nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[minulý] dddd [o] LT';\n                    case 3:\n                        return '[minulú stredu o] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [o] LT';\n                    case 6:\n                        return '[minulú sobotu o] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : 'pred %s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';\n            case 'ss':\n                if (number === 1) {\n                    result += withoutSuffix ? 'sekundo' : 'sekundi';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n                } else {\n                    result += 'sekund';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'ena minuta' : 'eno minuto';\n            case 'mm':\n                if (number === 1) {\n                    result += withoutSuffix ? 'minuta' : 'minuto';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'ena ura' : 'eno uro';\n            case 'hh':\n                if (number === 1) {\n                    result += withoutSuffix ? 'ura' : 'uro';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'uri' : 'urama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'ure' : 'urami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'ur' : 'urami';\n                }\n                return result;\n            case 'd':\n                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n            case 'dd':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n                } else {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n                }\n                return result;\n            case 'M':\n                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n            case 'MM':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n                } else {\n                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n                }\n                return result;\n            case 'y':\n                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n            case 'yy':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'leto' : 'letom';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'leta' : 'leti';\n                } else {\n                    result += withoutSuffix || isFuture ? 'let' : 'leti';\n                }\n                return result;\n        }\n    }\n\n    var sl = moment.defineLocale('sl', {\n        months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n        weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n        weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danes ob] LT',\n            nextDay  : '[jutri ob] LT',\n\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[v] [sredo] [ob] LT';\n                    case 6:\n                        return '[v] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[v] dddd [ob] LT';\n                }\n            },\n            lastDay  : '[včeraj ob] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prejšnjo] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[prejšnjo] [sredo] [ob] LT';\n                    case 6:\n                        return '[prejšnjo] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prejšnji] dddd [ob] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'čez %s',\n            past   : 'pred %s',\n            s      : processRelativeTime,\n            ss     : processRelativeTime,\n            m      : processRelativeTime,\n            mm     : processRelativeTime,\n            h      : processRelativeTime,\n            hh     : processRelativeTime,\n            d      : processRelativeTime,\n            dd     : processRelativeTime,\n            M      : processRelativeTime,\n            MM     : processRelativeTime,\n            y      : processRelativeTime,\n            yy     : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return sl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var sq = moment.defineLocale('sq', {\n        months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),\n        monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n        weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),\n        weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n        weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),\n        weekdaysParseExact : true,\n        meridiemParse: /PD|MD/,\n        isPM: function (input) {\n            return input.charAt(0) === 'M';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            return hours < 12 ? 'PD' : 'MD';\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Sot në] LT',\n            nextDay : '[Nesër në] LT',\n            nextWeek : 'dddd [në] LT',\n            lastDay : '[Dje në] LT',\n            lastWeek : 'dddd [e kaluar në] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'në %s',\n            past : '%s më parë',\n            s : 'disa sekonda',\n            ss : '%d sekonda',\n            m : 'një minutë',\n            mm : '%d minuta',\n            h : 'një orë',\n            hh : '%d orë',\n            d : 'një ditë',\n            dd : '%d ditë',\n            M : 'një muaj',\n            MM : '%d muaj',\n            y : 'një vit',\n            yy : '%d vite'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sq;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['sekunda', 'sekunde', 'sekundi'],\n            m: ['jedan minut', 'jedne minute'],\n            mm: ['minut', 'minute', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mesec', 'meseca', 'meseci'],\n            yy: ['godina', 'godine', 'godina']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var sr = moment.defineLocale('sr', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedelju] [u] LT';\n                    case 3:\n                        return '[u] [sredu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[juče u] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[prošle] [nedelje] [u] LT',\n                    '[prošlog] [ponedeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'pre %s',\n            s      : 'nekoliko sekundi',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'dan',\n            dd     : translator.translate,\n            M      : 'mesec',\n            MM     : translator.translate,\n            y      : 'godinu',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return sr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['секунда', 'секунде', 'секунди'],\n            m: ['један минут', 'једне минуте'],\n            mm: ['минут', 'минуте', 'минута'],\n            h: ['један сат', 'једног сата'],\n            hh: ['сат', 'сата', 'сати'],\n            dd: ['дан', 'дана', 'дана'],\n            MM: ['месец', 'месеца', 'месеци'],\n            yy: ['година', 'године', 'година']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var srCyrl = moment.defineLocale('sr-cyrl', {\n        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),\n        monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[данас у] LT',\n            nextDay: '[сутра у] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[у] [недељу] [у] LT';\n                    case 3:\n                        return '[у] [среду] [у] LT';\n                    case 6:\n                        return '[у] [суботу] [у] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[у] dddd [у] LT';\n                }\n            },\n            lastDay  : '[јуче у] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[прошле] [недеље] [у] LT',\n                    '[прошлог] [понедељка] [у] LT',\n                    '[прошлог] [уторка] [у] LT',\n                    '[прошле] [среде] [у] LT',\n                    '[прошлог] [четвртка] [у] LT',\n                    '[прошлог] [петка] [у] LT',\n                    '[прошле] [суботе] [у] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'за %s',\n            past   : 'пре %s',\n            s      : 'неколико секунди',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'дан',\n            dd     : translator.translate,\n            M      : 'месец',\n            MM     : translator.translate,\n            y      : 'годину',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return srCyrl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ss = moment.defineLocale('ss', {\n        months : \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split('_'),\n        monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n        weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),\n        weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n        weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Namuhla nga] LT',\n            nextDay : '[Kusasa nga] LT',\n            nextWeek : 'dddd [nga] LT',\n            lastDay : '[Itolo nga] LT',\n            lastWeek : 'dddd [leliphelile] [nga] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'nga %s',\n            past : 'wenteka nga %s',\n            s : 'emizuzwana lomcane',\n            ss : '%d mzuzwana',\n            m : 'umzuzu',\n            mm : '%d emizuzu',\n            h : 'lihora',\n            hh : '%d emahora',\n            d : 'lilanga',\n            dd : '%d emalanga',\n            M : 'inyanga',\n            MM : '%d tinyanga',\n            y : 'umnyaka',\n            yy : '%d iminyaka'\n        },\n        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'ekuseni';\n            } else if (hours < 15) {\n                return 'emini';\n            } else if (hours < 19) {\n                return 'entsambama';\n            } else {\n                return 'ebusuku';\n            }\n        },\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ekuseni') {\n                return hour;\n            } else if (meridiem === 'emini') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n                if (hour === 0) {\n                    return 0;\n                }\n                return hour + 12;\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : '%d',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ss;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var sv = moment.defineLocale('sv', {\n        months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n        weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n        weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [kl.] HH:mm',\n            LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Idag] LT',\n            nextDay: '[Imorgon] LT',\n            lastDay: '[Igår] LT',\n            nextWeek: '[På] dddd LT',\n            lastWeek: '[I] dddd[s] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : 'för %s sedan',\n            s : 'några sekunder',\n            ss : '%d sekunder',\n            m : 'en minut',\n            mm : '%d minuter',\n            h : 'en timme',\n            hh : '%d timmar',\n            d : 'en dag',\n            dd : '%d dagar',\n            M : 'en månad',\n            MM : '%d månader',\n            y : 'ett år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(e|a)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'e' :\n                (b === 1) ? 'a' :\n                (b === 2) ? 'a' :\n                (b === 3) ? 'e' : 'e';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var sw = moment.defineLocale('sw', {\n        months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),\n        weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n        weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[leo saa] LT',\n            nextDay : '[kesho saa] LT',\n            nextWeek : '[wiki ijayo] dddd [saat] LT',\n            lastDay : '[jana] LT',\n            lastWeek : '[wiki iliyopita] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s baadaye',\n            past : 'tokea %s',\n            s : 'hivi punde',\n            ss : 'sekunde %d',\n            m : 'dakika moja',\n            mm : 'dakika %d',\n            h : 'saa limoja',\n            hh : 'masaa %d',\n            d : 'siku moja',\n            dd : 'masiku %d',\n            M : 'mwezi mmoja',\n            MM : 'miezi %d',\n            y : 'mwaka mmoja',\n            yy : 'miaka %d'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return sw;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '௧',\n        '2': '௨',\n        '3': '௩',\n        '4': '௪',\n        '5': '௫',\n        '6': '௬',\n        '7': '௭',\n        '8': '௮',\n        '9': '௯',\n        '0': '௦'\n    }, numberMap = {\n        '௧': '1',\n        '௨': '2',\n        '௩': '3',\n        '௪': '4',\n        '௫': '5',\n        '௬': '6',\n        '௭': '7',\n        '௮': '8',\n        '௯': '9',\n        '௦': '0'\n    };\n\n    var ta = moment.defineLocale('ta', {\n        months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n        monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n        weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),\n        weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),\n        weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, HH:mm',\n            LLLL : 'dddd, D MMMM YYYY, HH:mm'\n        },\n        calendar : {\n            sameDay : '[இன்று] LT',\n            nextDay : '[நாளை] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[நேற்று] LT',\n            lastWeek : '[கடந்த வாரம்] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s இல்',\n            past : '%s முன்',\n            s : 'ஒரு சில விநாடிகள்',\n            ss : '%d விநாடிகள்',\n            m : 'ஒரு நிமிடம்',\n            mm : '%d நிமிடங்கள்',\n            h : 'ஒரு மணி நேரம்',\n            hh : '%d மணி நேரம்',\n            d : 'ஒரு நாள்',\n            dd : '%d நாட்கள்',\n            M : 'ஒரு மாதம்',\n            MM : '%d மாதங்கள்',\n            y : 'ஒரு வருடம்',\n            yy : '%d ஆண்டுகள்'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n        ordinal : function (number) {\n            return number + 'வது';\n        },\n        preparse: function (string) {\n            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // refer http://ta.wikipedia.org/s/1er1\n        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 2) {\n                return ' யாமம்';\n            } else if (hour < 6) {\n                return ' வைகறை';  // வைகறை\n            } else if (hour < 10) {\n                return ' காலை'; // காலை\n            } else if (hour < 14) {\n                return ' நண்பகல்'; // நண்பகல்\n            } else if (hour < 18) {\n                return ' எற்பாடு'; // எற்பாடு\n            } else if (hour < 22) {\n                return ' மாலை'; // மாலை\n            } else {\n                return ' யாமம்';\n            }\n        },\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'யாமம்') {\n                return hour < 2 ? hour : hour + 12;\n            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n                return hour;\n            } else if (meridiem === 'நண்பகல்') {\n                return hour >= 10 ? hour : hour + 12;\n            } else {\n                return hour + 12;\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return ta;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var te = moment.defineLocale('te', {\n        months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),\n        monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),\n        weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n        weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[నేడు] LT',\n            nextDay : '[రేపు] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[నిన్న] LT',\n            lastWeek : '[గత] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s లో',\n            past : '%s క్రితం',\n            s : 'కొన్ని క్షణాలు',\n            ss : '%d సెకన్లు',\n            m : 'ఒక నిమిషం',\n            mm : '%d నిమిషాలు',\n            h : 'ఒక గంట',\n            hh : '%d గంటలు',\n            d : 'ఒక రోజు',\n            dd : '%d రోజులు',\n            M : 'ఒక నెల',\n            MM : '%d నెలలు',\n            y : 'ఒక సంవత్సరం',\n            yy : '%d సంవత్సరాలు'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}వ/,\n        ordinal : '%dవ',\n        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'రాత్రి') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ఉదయం') {\n                return hour;\n            } else if (meridiem === 'మధ్యాహ్నం') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'సాయంత్రం') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'రాత్రి';\n            } else if (hour < 10) {\n                return 'ఉదయం';\n            } else if (hour < 17) {\n                return 'మధ్యాహ్నం';\n            } else if (hour < 20) {\n                return 'సాయంత్రం';\n            } else {\n                return 'రాత్రి';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return te;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var tet = moment.defineLocale('tet', {\n        months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n        weekdaysMin : 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Ohin iha] LT',\n            nextDay: '[Aban iha] LT',\n            nextWeek: 'dddd [iha] LT',\n            lastDay: '[Horiseik iha] LT',\n            lastWeek: 'dddd [semana kotuk] [iha] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'iha %s',\n            past : '%s liuba',\n            s : 'minutu balun',\n            ss : 'minutu %d',\n            m : 'minutu ida',\n            mm : 'minutu %d',\n            h : 'oras ida',\n            hh : 'oras %d',\n            d : 'loron ida',\n            dd : 'loron %d',\n            M : 'fulan ida',\n            MM : 'fulan %d',\n            y : 'tinan ida',\n            yy : 'tinan %d'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tet;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-ум',\n        1: '-ум',\n        2: '-юм',\n        3: '-юм',\n        4: '-ум',\n        5: '-ум',\n        6: '-ум',\n        7: '-ум',\n        8: '-ум',\n        9: '-ум',\n        10: '-ум',\n        12: '-ум',\n        13: '-ум',\n        20: '-ум',\n        30: '-юм',\n        40: '-ум',\n        50: '-ум',\n        60: '-ум',\n        70: '-ум',\n        80: '-ум',\n        90: '-ум',\n        100: '-ум'\n    };\n\n    var tg = moment.defineLocale('tg', {\n        months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n        monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split('_'),\n        weekdaysShort : 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n        weekdaysMin : 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Имрӯз соати] LT',\n            nextDay : '[Пагоҳ соати] LT',\n            lastDay : '[Дирӯз соати] LT',\n            nextWeek : 'dddd[и] [ҳафтаи оянда соати] LT',\n            lastWeek : 'dddd[и] [ҳафтаи гузашта соати] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'баъди %s',\n            past : '%s пеш',\n            s : 'якчанд сония',\n            m : 'як дақиқа',\n            mm : '%d дақиқа',\n            h : 'як соат',\n            hh : '%d соат',\n            d : 'як рӯз',\n            dd : '%d рӯз',\n            M : 'як моҳ',\n            MM : '%d моҳ',\n            y : 'як сол',\n            yy : '%d сол'\n        },\n        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'шаб') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'субҳ') {\n                return hour;\n            } else if (meridiem === 'рӯз') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'бегоҳ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'шаб';\n            } else if (hour < 11) {\n                return 'субҳ';\n            } else if (hour < 16) {\n                return 'рӯз';\n            } else if (hour < 19) {\n                return 'бегоҳ';\n            } else {\n                return 'шаб';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1th is the first week of the year.\n        }\n    });\n\n    return tg;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var th = moment.defineLocale('th', {\n        months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),\n        monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n        weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n        weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY เวลา H:mm',\n            LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'\n        },\n        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n        isPM: function (input) {\n            return input === 'หลังเที่ยง';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ก่อนเที่ยง';\n            } else {\n                return 'หลังเที่ยง';\n            }\n        },\n        calendar : {\n            sameDay : '[วันนี้ เวลา] LT',\n            nextDay : '[พรุ่งนี้ เวลา] LT',\n            nextWeek : 'dddd[หน้า เวลา] LT',\n            lastDay : '[เมื่อวานนี้ เวลา] LT',\n            lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'อีก %s',\n            past : '%sที่แล้ว',\n            s : 'ไม่กี่วินาที',\n            ss : '%d วินาที',\n            m : '1 นาที',\n            mm : '%d นาที',\n            h : '1 ชั่วโมง',\n            hh : '%d ชั่วโมง',\n            d : '1 วัน',\n            dd : '%d วัน',\n            M : '1 เดือน',\n            MM : '%d เดือน',\n            y : '1 ปี',\n            yy : '%d ปี'\n        }\n    });\n\n    return th;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var tlPh = moment.defineLocale('tl-ph', {\n        months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),\n        monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),\n        weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'MM/D/YYYY',\n            LL : 'MMMM D, YYYY',\n            LLL : 'MMMM D, YYYY HH:mm',\n            LLLL : 'dddd, MMMM DD, YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'sa loob ng %s',\n            past : '%s ang nakalipas',\n            s : 'ilang segundo',\n            ss : '%d segundo',\n            m : 'isang minuto',\n            mm : '%d minuto',\n            h : 'isang oras',\n            hh : '%d oras',\n            d : 'isang araw',\n            dd : '%d araw',\n            M : 'isang buwan',\n            MM : '%d buwan',\n            y : 'isang taon',\n            yy : '%d taon'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : function (number) {\n            return number;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tlPh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n    function translateFuture(output) {\n        var time = output;\n        time = (output.indexOf('jaj') !== -1) ?\n        time.slice(0, -3) + 'leS' :\n        (output.indexOf('jar') !== -1) ?\n        time.slice(0, -3) + 'waQ' :\n        (output.indexOf('DIS') !== -1) ?\n        time.slice(0, -3) + 'nem' :\n        time + ' pIq';\n        return time;\n    }\n\n    function translatePast(output) {\n        var time = output;\n        time = (output.indexOf('jaj') !== -1) ?\n        time.slice(0, -3) + 'Hu’' :\n        (output.indexOf('jar') !== -1) ?\n        time.slice(0, -3) + 'wen' :\n        (output.indexOf('DIS') !== -1) ?\n        time.slice(0, -3) + 'ben' :\n        time + ' ret';\n        return time;\n    }\n\n    function translate(number, withoutSuffix, string, isFuture) {\n        var numberNoun = numberAsNoun(number);\n        switch (string) {\n            case 'ss':\n                return numberNoun + ' lup';\n            case 'mm':\n                return numberNoun + ' tup';\n            case 'hh':\n                return numberNoun + ' rep';\n            case 'dd':\n                return numberNoun + ' jaj';\n            case 'MM':\n                return numberNoun + ' jar';\n            case 'yy':\n                return numberNoun + ' DIS';\n        }\n    }\n\n    function numberAsNoun(number) {\n        var hundred = Math.floor((number % 1000) / 100),\n        ten = Math.floor((number % 100) / 10),\n        one = number % 10,\n        word = '';\n        if (hundred > 0) {\n            word += numbersNouns[hundred] + 'vatlh';\n        }\n        if (ten > 0) {\n            word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';\n        }\n        if (one > 0) {\n            word += ((word !== '') ? ' ' : '') + numbersNouns[one];\n        }\n        return (word === '') ? 'pagh' : word;\n    }\n\n    var tlh = moment.defineLocale('tlh', {\n        months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),\n        monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[DaHjaj] LT',\n            nextDay: '[wa’leS] LT',\n            nextWeek: 'LLL',\n            lastDay: '[wa’Hu’] LT',\n            lastWeek: 'LLL',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : translateFuture,\n            past : translatePast,\n            s : 'puS lup',\n            ss : translate,\n            m : 'wa’ tup',\n            mm : translate,\n            h : 'wa’ rep',\n            hh : translate,\n            d : 'wa’ jaj',\n            dd : translate,\n            M : 'wa’ jar',\n            MM : translate,\n            y : 'wa’ DIS',\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tlh;\n\n})));\n","\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    var suffixes = {\n        1: '\\'inci',\n        5: '\\'inci',\n        8: '\\'inci',\n        70: '\\'inci',\n        80: '\\'inci',\n        2: '\\'nci',\n        7: '\\'nci',\n        20: '\\'nci',\n        50: '\\'nci',\n        3: '\\'üncü',\n        4: '\\'üncü',\n        100: '\\'üncü',\n        6: '\\'ncı',\n        9: '\\'uncu',\n        10: '\\'uncu',\n        30: '\\'uncu',\n        60: '\\'ıncı',\n        90: '\\'ıncı'\n    };\n\n    var tr = moment.defineLocale('tr', {\n        months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),\n        monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n        weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),\n        weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),\n        weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[bugün saat] LT',\n            nextDay : '[yarın saat] LT',\n            nextWeek : '[gelecek] dddd [saat] LT',\n            lastDay : '[dün] LT',\n            lastWeek : '[geçen] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s sonra',\n            past : '%s önce',\n            s : 'birkaç saniye',\n            ss : '%d saniye',\n            m : 'bir dakika',\n            mm : '%d dakika',\n            h : 'bir saat',\n            hh : '%d saat',\n            d : 'bir gün',\n            dd : '%d gün',\n            M : 'bir ay',\n            MM : '%d ay',\n            y : 'bir yıl',\n            yy : '%d yıl'\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {  // special case for zero\n                        return number + '\\'ıncı';\n                    }\n                    var a = number % 10,\n                        b = number % 100 - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return tr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n    // This is currently too difficult (maybe even impossible) to add.\n    var tzl = moment.defineLocale('tzl', {\n        months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n        weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n        weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n        weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM [dallas] YYYY',\n            LLL : 'D. MMMM [dallas] YYYY HH.mm',\n            LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'\n        },\n        meridiemParse: /d\\'o|d\\'a/i,\n        isPM : function (input) {\n            return 'd\\'o' === input.toLowerCase();\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'd\\'o' : 'D\\'O';\n            } else {\n                return isLower ? 'd\\'a' : 'D\\'A';\n            }\n        },\n        calendar : {\n            sameDay : '[oxhi à] LT',\n            nextDay : '[demà à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[ieiri à] LT',\n            lastWeek : '[sür el] dddd [lasteu à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'osprei %s',\n            past : 'ja%s',\n            s : processRelativeTime,\n            ss : processRelativeTime,\n            m : processRelativeTime,\n            mm : processRelativeTime,\n            h : processRelativeTime,\n            hh : processRelativeTime,\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's': ['viensas secunds', '\\'iensas secunds'],\n            'ss': [number + ' secunds', '' + number + ' secunds'],\n            'm': ['\\'n míut', '\\'iens míut'],\n            'mm': [number + ' míuts', '' + number + ' míuts'],\n            'h': ['\\'n þora', '\\'iensa þora'],\n            'hh': [number + ' þoras', '' + number + ' þoras'],\n            'd': ['\\'n ziua', '\\'iensa ziua'],\n            'dd': [number + ' ziuas', '' + number + ' ziuas'],\n            'M': ['\\'n mes', '\\'iens mes'],\n            'MM': [number + ' mesen', '' + number + ' mesen'],\n            'y': ['\\'n ar', '\\'iens ar'],\n            'yy': [number + ' ars', '' + number + ' ars']\n        };\n        return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);\n    }\n\n    return tzl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var tzm = moment.defineLocale('tzm', {\n        months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n        monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n        weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n            nextWeek: 'dddd [ⴴ] LT',\n            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n            lastWeek: 'dddd [ⴴ] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n            past : 'ⵢⴰⵏ %s',\n            s : 'ⵉⵎⵉⴽ',\n            ss : '%d ⵉⵎⵉⴽ',\n            m : 'ⵎⵉⵏⵓⴺ',\n            mm : '%d ⵎⵉⵏⵓⴺ',\n            h : 'ⵙⴰⵄⴰ',\n            hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n            d : 'ⴰⵙⵙ',\n            dd : '%d oⵙⵙⴰⵏ',\n            M : 'ⴰⵢoⵓⵔ',\n            MM : '%d ⵉⵢⵢⵉⵔⵏ',\n            y : 'ⴰⵙⴳⴰⵙ',\n            yy : '%d ⵉⵙⴳⴰⵙⵏ'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return tzm;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var tzmLatn = moment.defineLocale('tzm-latn', {\n        months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n        monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n        weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[asdkh g] LT',\n            nextDay: '[aska g] LT',\n            nextWeek: 'dddd [g] LT',\n            lastDay: '[assant g] LT',\n            lastWeek: 'dddd [g] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'dadkh s yan %s',\n            past : 'yan %s',\n            s : 'imik',\n            ss : '%d imik',\n            m : 'minuḍ',\n            mm : '%d minuḍ',\n            h : 'saɛa',\n            hh : '%d tassaɛin',\n            d : 'ass',\n            dd : '%d ossan',\n            M : 'ayowr',\n            MM : '%d iyyirn',\n            y : 'asgas',\n            yy : '%d isgasn'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return tzmLatn;\n\n})));\n","//! moment.js language configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ugCn = moment.defineLocale('ug-cn', {\n        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n            '_'\n        ),\n        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm'\n        },\n        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                meridiem === 'يېرىم كېچە' ||\n                meridiem === 'سەھەر' ||\n                meridiem === 'چۈشتىن بۇرۇن'\n            ) {\n                return hour;\n            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n                return hour + 12;\n            } else {\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return 'يېرىم كېچە';\n            } else if (hm < 900) {\n                return 'سەھەر';\n            } else if (hm < 1130) {\n                return 'چۈشتىن بۇرۇن';\n            } else if (hm < 1230) {\n                return 'چۈش';\n            } else if (hm < 1800) {\n                return 'چۈشتىن كېيىن';\n            } else {\n                return 'كەچ';\n            }\n        },\n        calendar: {\n            sameDay: '[بۈگۈن سائەت] LT',\n            nextDay: '[ئەتە سائەت] LT',\n            nextWeek: '[كېلەركى] dddd [سائەت] LT',\n            lastDay: '[تۆنۈگۈن] LT',\n            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%s كېيىن',\n            past: '%s بۇرۇن',\n            s: 'نەچچە سېكونت',\n            ss: '%d سېكونت',\n            m: 'بىر مىنۇت',\n            mm: '%d مىنۇت',\n            h: 'بىر سائەت',\n            hh: '%d سائەت',\n            d: 'بىر كۈن',\n            dd: '%d كۈن',\n            M: 'بىر ئاي',\n            MM: '%d ئاي',\n            y: 'بىر يىل',\n            yy: '%d يىل'\n        },\n\n        dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '-كۈنى';\n                case 'w':\n                case 'W':\n                    return number + '-ھەپتە';\n                default:\n                    return number;\n            }\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 7 // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ugCn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n            'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n            'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n            'dd': 'день_дні_днів',\n            'MM': 'місяць_місяці_місяців',\n            'yy': 'рік_роки_років'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвилина' : 'хвилину';\n        }\n        else if (key === 'h') {\n            return withoutSuffix ? 'година' : 'годину';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    function weekdaysCaseReplace(m, format) {\n        var weekdays = {\n            'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),\n            'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),\n            'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')\n        };\n\n        if (m === true) {\n            return weekdays['nominative'].slice(1, 7).concat(weekdays['nominative'].slice(0, 1));\n        }\n        if (!m) {\n            return weekdays['nominative'];\n        }\n\n        var nounCase = (/(\\[[ВвУу]\\]) ?dddd/).test(format) ?\n            'accusative' :\n            ((/\\[?(?:минулої|наступної)? ?\\] ?dddd/).test(format) ?\n                'genitive' :\n                'nominative');\n        return weekdays[nounCase][m.day()];\n    }\n    function processHoursFunction(str) {\n        return function () {\n            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n        };\n    }\n\n    var uk = moment.defineLocale('uk', {\n        months : {\n            'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),\n            'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')\n        },\n        monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),\n        weekdays : weekdaysCaseReplace,\n        weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY р.',\n            LLL : 'D MMMM YYYY р., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY р., HH:mm'\n        },\n        calendar : {\n            sameDay: processHoursFunction('[Сьогодні '),\n            nextDay: processHoursFunction('[Завтра '),\n            lastDay: processHoursFunction('[Вчора '),\n            nextWeek: processHoursFunction('[У] dddd ['),\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return processHoursFunction('[Минулої] dddd [').call(this);\n                    case 1:\n                    case 2:\n                    case 4:\n                        return processHoursFunction('[Минулого] dddd [').call(this);\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'за %s',\n            past : '%s тому',\n            s : 'декілька секунд',\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : 'годину',\n            hh : relativeTimeWithPlural,\n            d : 'день',\n            dd : relativeTimeWithPlural,\n            M : 'місяць',\n            MM : relativeTimeWithPlural,\n            y : 'рік',\n            yy : relativeTimeWithPlural\n        },\n        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n        meridiemParse: /ночі|ранку|дня|вечора/,\n        isPM: function (input) {\n            return /^(дня|вечора)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночі';\n            } else if (hour < 12) {\n                return 'ранку';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечора';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return uk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'جنوری',\n        'فروری',\n        'مارچ',\n        'اپریل',\n        'مئی',\n        'جون',\n        'جولائی',\n        'اگست',\n        'ستمبر',\n        'اکتوبر',\n        'نومبر',\n        'دسمبر'\n    ];\n    var days = [\n        'اتوار',\n        'پیر',\n        'منگل',\n        'بدھ',\n        'جمعرات',\n        'جمعہ',\n        'ہفتہ'\n    ];\n\n    var ur = moment.defineLocale('ur', {\n        months : months,\n        monthsShort : months,\n        weekdays : days,\n        weekdaysShort : days,\n        weekdaysMin : days,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd، D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /صبح|شام/,\n        isPM : function (input) {\n            return 'شام' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar : {\n            sameDay : '[آج بوقت] LT',\n            nextDay : '[کل بوقت] LT',\n            nextWeek : 'dddd [بوقت] LT',\n            lastDay : '[گذشتہ روز بوقت] LT',\n            lastWeek : '[گذشتہ] dddd [بوقت] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s بعد',\n            past : '%s قبل',\n            s : 'چند سیکنڈ',\n            ss : '%d سیکنڈ',\n            m : 'ایک منٹ',\n            mm : '%d منٹ',\n            h : 'ایک گھنٹہ',\n            hh : '%d گھنٹے',\n            d : 'ایک دن',\n            dd : '%d دن',\n            M : 'ایک ماہ',\n            MM : '%d ماہ',\n            y : 'ایک سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ur;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var uz = moment.defineLocale('uz', {\n        months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n        monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n        weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n        weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'D MMMM YYYY, dddd HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бугун соат] LT [да]',\n            nextDay : '[Эртага] LT [да]',\n            nextWeek : 'dddd [куни соат] LT [да]',\n            lastDay : '[Кеча соат] LT [да]',\n            lastWeek : '[Утган] dddd [куни соат] LT [да]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'Якин %s ичида',\n            past : 'Бир неча %s олдин',\n            s : 'фурсат',\n            ss : '%d фурсат',\n            m : 'бир дакика',\n            mm : '%d дакика',\n            h : 'бир соат',\n            hh : '%d соат',\n            d : 'бир кун',\n            dd : '%d кун',\n            M : 'бир ой',\n            MM : '%d ой',\n            y : 'бир йил',\n            yy : '%d йил'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return uz;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var uzLatn = moment.defineLocale('uz-latn', {\n        months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),\n        monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n        weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),\n        weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n        weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'D MMMM YYYY, dddd HH:mm'\n        },\n        calendar : {\n            sameDay : '[Bugun soat] LT [da]',\n            nextDay : '[Ertaga] LT [da]',\n            nextWeek : 'dddd [kuni soat] LT [da]',\n            lastDay : '[Kecha soat] LT [da]',\n            lastWeek : '[O\\'tgan] dddd [kuni soat] LT [da]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'Yaqin %s ichida',\n            past : 'Bir necha %s oldin',\n            s : 'soniya',\n            ss : '%d soniya',\n            m : 'bir daqiqa',\n            mm : '%d daqiqa',\n            h : 'bir soat',\n            hh : '%d soat',\n            d : 'bir kun',\n            dd : '%d kun',\n            M : 'bir oy',\n            MM : '%d oy',\n            y : 'bir yil',\n            yy : '%d yil'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return uzLatn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var vi = moment.defineLocale('vi', {\n        months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),\n        monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),\n        weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysParseExact : true,\n        meridiemParse: /sa|ch/i,\n        isPM : function (input) {\n            return /^ch$/i.test(input);\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'sa' : 'SA';\n            } else {\n                return isLower ? 'ch' : 'CH';\n            }\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM [năm] YYYY',\n            LLL : 'D MMMM [năm] YYYY HH:mm',\n            LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',\n            l : 'DD/M/YYYY',\n            ll : 'D MMM YYYY',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd, D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hôm nay lúc] LT',\n            nextDay: '[Ngày mai lúc] LT',\n            nextWeek: 'dddd [tuần tới lúc] LT',\n            lastDay: '[Hôm qua lúc] LT',\n            lastWeek: 'dddd [tuần rồi lúc] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s tới',\n            past : '%s trước',\n            s : 'vài giây',\n            ss : '%d giây' ,\n            m : 'một phút',\n            mm : '%d phút',\n            h : 'một giờ',\n            hh : '%d giờ',\n            d : 'một ngày',\n            dd : '%d ngày',\n            M : 'một tháng',\n            MM : '%d tháng',\n            y : 'một năm',\n            yy : '%d năm'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : function (number) {\n            return number;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return vi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var xPseudo = moment.defineLocale('x-pseudo', {\n        months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),\n        monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),\n        weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n        weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[T~ódá~ý át] LT',\n            nextDay : '[T~ómó~rró~w át] LT',\n            nextWeek : 'dddd [át] LT',\n            lastDay : '[Ý~ést~érdá~ý át] LT',\n            lastWeek : '[L~ást] dddd [át] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'í~ñ %s',\n            past : '%s á~gó',\n            s : 'á ~féw ~sécó~ñds',\n            ss : '%d s~écóñ~ds',\n            m : 'á ~míñ~úté',\n            mm : '%d m~íñú~tés',\n            h : 'á~ñ hó~úr',\n            hh : '%d h~óúrs',\n            d : 'á ~dáý',\n            dd : '%d d~áýs',\n            M : 'á ~móñ~th',\n            MM : '%d m~óñt~hs',\n            y : 'á ~ýéár',\n            yy : '%d ý~éárs'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return xPseudo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var yo = moment.defineLocale('yo', {\n        months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),\n        monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n        weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n        weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n        weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Ònì ni] LT',\n            nextDay : '[Ọ̀la ni] LT',\n            nextWeek : 'dddd [Ọsẹ̀ tón\\'bọ] [ni] LT',\n            lastDay : '[Àna ni] LT',\n            lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ní %s',\n            past : '%s kọjá',\n            s : 'ìsẹjú aayá die',\n            ss :'aayá %d',\n            m : 'ìsẹjú kan',\n            mm : 'ìsẹjú %d',\n            h : 'wákati kan',\n            hh : 'wákati %d',\n            d : 'ọjọ́ kan',\n            dd : 'ọjọ́ %d',\n            M : 'osù kan',\n            MM : 'osù %d',\n            y : 'ọdún kan',\n            yy : 'ọdún %d'\n        },\n        dayOfMonthOrdinalParse : /ọjọ́\\s\\d{1,2}/,\n        ordinal : 'ọjọ́ %d',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return yo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var zhCn = moment.defineLocale('zh-cn', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日Ah点mm分',\n            LLLL : 'YYYY年M月D日ddddAh点mm分',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' ||\n                    meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            } else {\n                // '中午'\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天]LT',\n            nextDay : '[明天]LT',\n            nextWeek : '[下]ddddLT',\n            lastDay : '[昨天]LT',\n            lastWeek : '[上]ddddLT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '周';\n                default:\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s内',\n            past : '%s前',\n            s : '几秒',\n            ss : '%d 秒',\n            m : '1 分钟',\n            mm : '%d 分钟',\n            h : '1 小时',\n            hh : '%d 小时',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 个月',\n            MM : '%d 个月',\n            y : '1 年',\n            yy : '%d 年'\n        },\n        week : {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return zhCn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var zhHk = moment.defineLocale('zh-hk', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日dddd HH:mm',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天]LT',\n            nextDay : '[明天]LT',\n            nextWeek : '[下]ddddLT',\n            lastDay : '[昨天]LT',\n            lastWeek : '[上]ddddLT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd' :\n                case 'D' :\n                case 'DDD' :\n                    return number + '日';\n                case 'M' :\n                    return number + '月';\n                case 'w' :\n                case 'W' :\n                    return number + '週';\n                default :\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s內',\n            past : '%s前',\n            s : '幾秒',\n            ss : '%d 秒',\n            m : '1 分鐘',\n            mm : '%d 分鐘',\n            h : '1 小時',\n            hh : '%d 小時',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 個月',\n            MM : '%d 個月',\n            y : '1 年',\n            yy : '%d 年'\n        }\n    });\n\n    return zhHk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var zhTw = moment.defineLocale('zh-tw', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日dddd HH:mm',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天] LT',\n            nextDay : '[明天] LT',\n            nextWeek : '[下]dddd LT',\n            lastDay : '[昨天] LT',\n            lastWeek : '[上]dddd LT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd' :\n                case 'D' :\n                case 'DDD' :\n                    return number + '日';\n                case 'M' :\n                    return number + '月';\n                case 'w' :\n                case 'W' :\n                    return number + '週';\n                default :\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s內',\n            past : '%s前',\n            s : '幾秒',\n            ss : '%d 秒',\n            m : '1 分鐘',\n            mm : '%d 分鐘',\n            h : '1 小時',\n            hh : '%d 小時',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 個月',\n            MM : '%d 個月',\n            y : '1 年',\n            yy : '%d 年'\n        }\n    });\n\n    return zhTw;\n\n})));\n","// Because working with row and column-spanning cells is not quite\n// trivial, this code builds up a descriptive structure for a given\n// table node. The structures are cached with the (persistent) table\n// nodes as key, so that they only have to be recomputed when the\n// content of the table changes.\n//\n// This does mean that they have to store table-relative, not\n// document-relative positions. So code that uses them will typically\n// compute the start position of the table and offset positions passed\n// to or gotten from this structure by that amount.\n\nlet readFromCache, addToCache\n// Prefer using a weak map to cache table maps. Fall back on a\n// fixed-size cache if that's not supported.\nif (typeof WeakMap != \"undefined\") {\n  let cache = new WeakMap\n  readFromCache = key => cache.get(key)\n  addToCache = (key, value) => {\n    cache.set(key, value)\n    return value\n  }\n} else {\n  let cache = [], cacheSize = 10, cachePos = 0\n  readFromCache = key => {\n    for (let i = 0; i < cache.length; i += 2)\n      if (cache[i] == key) return cache[i + 1]\n  }\n  addToCache = (key, value) => {\n    if (cachePos == cacheSize) cachePos = 0\n    cache[cachePos++] = key\n    return cache[cachePos++] = value\n  }\n}\n\nexport class Rect {\n  constructor(left, top, right, bottom) {\n    this.left = left; this.top = top; this.right = right; this.bottom = bottom\n  }\n}\n\n// ::- A table map describes the structore of a given table. To avoid\n// recomputing them all the time, they are cached per table node. To\n// be able to do that, positions saved in the map are relative to the\n// start of the table, rather than the start of the document.\nexport class TableMap {\n  constructor(width, height, map, problems) {\n    // :: number The width of the table\n    this.width = width\n    // :: number The table's height\n    this.height = height\n    // :: [number] A width * height array with the start position of\n    // the cell covering that part of the table in each slot\n    this.map = map\n    // An optional array of problems (cell overlap or non-rectangular\n    // shape) for the table, used by the table normalizer.\n    this.problems = problems\n  }\n\n  // :: (number) → Rect\n  // Find the dimensions of the cell at the given position.\n  findCell(pos) {\n    for (let i = 0; i < this.map.length; i++) {\n      let curPos = this.map[i]\n      if (curPos != pos) continue\n      let left = i % this.width, top = (i / this.width) | 0\n      let right = left + 1, bottom = top + 1\n      for (let j = 1; right < this.width && this.map[i + j] == curPos; j++) right++\n      for (let j = 1; bottom < this.height && this.map[i + (this.width * j)] == curPos; j++) bottom++\n      return new Rect(left, top, right, bottom)\n    }\n    throw new RangeError(\"No cell with offset \" + pos + \" found\")\n  }\n\n  // :: (number) → number\n  // Find the left side of the cell at the given position.\n  colCount(pos) {\n    for (let i = 0; i < this.map.length; i++)\n      if (this.map[i] == pos) return i % this.width\n    throw new RangeError(\"No cell with offset \" + pos + \" found\")\n  }\n\n  // :: (number, string, number) → ?number\n  // Find the next cell in the given direction, starting from the cell\n  // at `pos`, if any.\n  nextCell(pos, axis, dir) {\n    let {left, right, top, bottom} = this.findCell(pos)\n    if (axis == \"horiz\") {\n      if (dir < 0 ? left == 0 : right == this.width) return null\n      return this.map[top * this.width + (dir < 0 ? left - 1 : right)]\n    } else {\n      if (dir < 0 ? top == 0 : bottom == this.height) return null\n      return this.map[left + this.width * (dir < 0 ? top - 1 : bottom)]\n    }\n  }\n\n  // :: (number, number) → Rect\n  // Get the rectangle spanning the two given cells.\n  rectBetween(a, b) {\n    let {left: leftA, right: rightA, top: topA, bottom: bottomA} = this.findCell(a)\n    let {left: leftB, right: rightB, top: topB, bottom: bottomB} = this.findCell(b)\n    return new Rect(Math.min(leftA, leftB), Math.min(topA, topB),\n                    Math.max(rightA, rightB), Math.max(bottomA, bottomB))\n  }\n\n  // :: (Rect) → [number]\n  // Return the position of all cells that have the top left corner in\n  // the given rectangle.\n  cellsInRect(rect) {\n    let result = [], seen = {}\n    for (let row = rect.top; row < rect.bottom; row++) {\n      for (let col = rect.left; col < rect.right; col++) {\n        let index = row * this.width + col, pos = this.map[index]\n        if (seen[pos]) continue\n        seen[pos] = true\n        if ((col != rect.left || !col || this.map[index - 1] != pos) &&\n            (row != rect.top || !row || this.map[index - this.width] != pos))\n          result.push(pos)\n      }\n    }\n    return result\n  }\n\n  // :: (number, number, Node) → number\n  // Return the position at which the cell at the given row and column\n  // starts, or would start, if a cell started there.\n  positionAt(row, col, table) {\n    for (let i = 0, rowStart = 0;; i++) {\n      let rowEnd = rowStart + table.child(i).nodeSize\n      if (i == row) {\n        let index = col + row * this.width, rowEndIndex = (row + 1) * this.width\n        // Skip past cells from previous rows (via rowspan)\n        while (index < rowEndIndex && this.map[index] < rowStart) index++\n        return index == rowEndIndex ? rowEnd - 1 : this.map[index]\n      }\n      rowStart = rowEnd\n    }\n  }\n\n  // :: (Node) → TableMap\n  // Find the table map for the given table node.\n  static get(table) {\n    return readFromCache(table) || addToCache(table, computeMap(table))\n  }\n}\n\n// Compute a table map.\nfunction computeMap(table) {\n  if (table.type.spec.tableRole != \"table\") throw new RangeError(\"Not a table node: \" + table.type.name)\n  let width = findWidth(table), height = table.childCount\n  let map = [], mapPos = 0, problems = null, colWidths = []\n  for (let i = 0, e = width * height; i < e; i++) map[i] = 0\n\n  for (let row = 0, pos = 0; row < height; row++) {\n    let rowNode = table.child(row)\n    pos++\n    for (let i = 0;; i++) {\n      while (mapPos < map.length && map[mapPos] != 0) mapPos++\n      if (i == rowNode.childCount) break\n      let cellNode = rowNode.child(i), {colspan, rowspan, colwidth} = cellNode.attrs\n      for (let h = 0; h < rowspan; h++) {\n        if (h + row >= height) {\n          (problems || (problems = [])).push({type: \"overlong_rowspan\", pos, n: rowspan - h})\n          break\n        }\n        let start = mapPos + (h * width)\n        for (let w = 0; w < colspan; w++) {\n          if (map[start + w] == 0)\n            map[start + w] = pos\n          else\n            (problems || (problems = [])).push({type: \"collision\", row, pos, n: colspan - w})\n          let colW = colwidth && colwidth[w]\n          if (colW) {\n            let widthIndex = ((start + w) % width) * 2, prev = colWidths[widthIndex]\n            if (prev == null || (prev != colW && colWidths[widthIndex + 1] == 1)) {\n              colWidths[widthIndex] = colW\n              colWidths[widthIndex + 1] = 1\n            } else if (prev == colW) {\n              colWidths[widthIndex + 1]++\n            }\n          }\n        }\n      }\n      mapPos += colspan\n      pos += cellNode.nodeSize\n    }\n    let expectedPos = (row + 1) * width, missing = 0\n    while (mapPos < expectedPos) if (map[mapPos++] == 0) missing++\n    if (missing) (problems || (problems = [])).push({type: \"missing\", row, n: missing})\n    pos++\n  }\n\n  let tableMap = new TableMap(width, height, map, problems), badWidths = false\n\n  // For columns that have defined widths, but whose widths disagree\n  // between rows, fix up the cells whose width doesn't match the\n  // computed one.\n  for (let i = 0; !badWidths && i < colWidths.length; i += 2)\n    if (colWidths[i] != null && colWidths[i + 1] < height) badWidths = true\n  if (badWidths) findBadColWidths(tableMap, colWidths, table)\n\n  return tableMap\n}\n\nfunction findWidth(table) {\n  let width = -1, hasRowSpan = false\n  for (let row = 0; row < table.childCount; row++) {\n    let rowNode = table.child(row), rowWidth = 0\n    if (hasRowSpan) for (let j = 0; j < row; j++) {\n      let prevRow = table.child(j)\n      for (let i = 0; i < prevRow.childCount; i++) {\n        let cell = prevRow.child(i)\n        if (j + cell.attrs.rowspan > row) rowWidth += cell.attrs.colspan\n      }\n    }\n    for (let i = 0; i < rowNode.childCount; i++) {\n      let cell = rowNode.child(i)\n      rowWidth += cell.attrs.colspan\n      if (cell.attrs.rowspan > 1) hasRowSpan = true\n    }\n    if (width == -1)\n      width = rowWidth\n    else if (width != rowWidth)\n      width = Math.max(width, rowWidth)\n  }\n  return width\n}\n\nfunction findBadColWidths(map, colWidths, table) {\n  if (!map.problems) map.problems = []\n  for (let i = 0, seen = {}; i < map.map.length; i++) {\n    let pos = map.map[i]\n    if (seen[pos]) continue\n    seen[pos] = true\n    let node = table.nodeAt(pos), updated = null\n    for (let j = 0; j < node.attrs.colspan; j++) {\n      let col = (i + j) % map.width, colWidth = colWidths[col * 2]\n      if (colWidth != null && (!node.attrs.colwidth || node.attrs.colwidth[j] != colWidth))\n        (updated || (updated = freshColWidth(node.attrs)))[j] = colWidth\n    }\n    if (updated) map.problems.unshift({type: \"colwidth mismatch\", pos, colwidth: updated})\n  }\n}\n\nfunction freshColWidth(attrs) {\n  if (attrs.colwidth) return attrs.colwidth.slice()\n  let result = []\n  for (let i = 0; i < attrs.colspan; i++) result.push(0)\n  return result\n}\n","// Various helper function for working with tables\n\nimport {PluginKey} from \"prosemirror-state\"\n\nimport {TableMap} from \"./tablemap\"\nimport {tableNodeTypes} from \"./schema\";\n\nexport const key = new PluginKey(\"selectingCells\")\n\nexport function cellAround($pos) {\n  for (let d = $pos.depth - 1; d > 0; d--)\n    if ($pos.node(d).type.spec.tableRole == \"row\") return $pos.node(0).resolve($pos.before(d + 1))\n  return null\n}\n\nexport function cellWrapping($pos) {\n  for (let d = $pos.depth; d > 0; d--) { // Sometimes the cell can be in the same depth.\n    const role = $pos.node(d).type.spec.tableRole;\n    if (role === \"cell\" || role === 'header_cell') return $pos.node(d)\n  }\n  return null\n}\n\nexport function isInTable(state) {\n  let $head = state.selection.$head\n  for (let d = $head.depth; d > 0; d--) if ($head.node(d).type.spec.tableRole == \"row\") return true\n  return false\n}\n\nexport function selectionCell(state) {\n  let sel = state.selection\n  if (sel.$anchorCell) {\n    return sel.$anchorCell.pos > sel.$headCell.pos ? sel.$anchorCell : sel.$headCell;\n  } else if (sel.node && sel.node.type.spec.tableRole == \"cell\") {\n    return sel.$anchor\n  }\n  return cellAround(sel.$head) || cellNear(sel.$head)\n}\n\nfunction cellNear($pos) {\n  for (let after = $pos.nodeAfter, pos = $pos.pos; after; after = after.firstChild, pos++) {\n    let role = after.type.spec.tableRole\n    if (role == \"cell\" || role == \"header_cell\") return $pos.doc.resolve(pos)\n  }\n  for (let before = $pos.nodeBefore, pos = $pos.pos; before; before = before.lastChild, pos--) {\n    let role = before.type.spec.tableRole\n    if (role == \"cell\" || role == \"header_cell\") return $pos.doc.resolve(pos - before.nodeSize)\n  }\n}\n\nexport function pointsAtCell($pos) {\n  return $pos.parent.type.spec.tableRole == \"row\" && $pos.nodeAfter\n}\n\nexport function moveCellForward($pos) {\n  return $pos.node(0).resolve($pos.pos + $pos.nodeAfter.nodeSize)\n}\n\nexport function inSameTable($a, $b) {\n  return $a.depth == $b.depth && $a.pos >= $b.start(-1) && $a.pos <= $b.end(-1)\n}\n\nexport function findCell($pos) {\n  return TableMap.get($pos.node(-1)).findCell($pos.pos - $pos.start(-1))\n}\n\nexport function colCount($pos) {\n  return TableMap.get($pos.node(-1)).colCount($pos.pos - $pos.start(-1))\n}\n\nexport function nextCell($pos, axis, dir) {\n  let start = $pos.start(-1), map = TableMap.get($pos.node(-1))\n  let moved = map.nextCell($pos.pos - start, axis, dir)\n  return moved == null ? null : $pos.node(0).resolve(start + moved)\n}\n\nexport function setAttr(attrs, name, value) {\n  let result = {}\n  for (let prop in attrs) result[prop] = attrs[prop]\n  result[name] = value\n  return result\n}\n\nexport function removeColSpan(attrs, pos, n=1) {\n  let result = setAttr(attrs, \"colspan\", attrs.colspan - n)\n  if (result.colwidth) {\n    result.colwidth = result.colwidth.slice()\n    result.colwidth.splice(pos, n)\n    if (!result.colwidth.some(w => w > 0)) result.colwidth = null\n  }\n  return result\n}\n\nexport function addColSpan(attrs, pos, n=1) {\n  let result = setAttr(attrs, \"colspan\", attrs.colspan + n)\n  if (result.colwidth) {\n    result.colwidth = result.colwidth.slice()\n    for (let i = 0; i < n; i++) result.colwidth.splice(pos, 0, 0)\n  }\n  return result\n}\n\nexport function columnIsHeader(map, table, col) {\n  let headerCell = tableNodeTypes(table.type.schema).header_cell\n  for (let row = 0; row < map.height; row++)\n    if (table.nodeAt(map.map[col + row * map.width]).type != headerCell)\n      return false\n  return true\n}\n","// This file defines a ProseMirror selection subclass that models\n// table cell selections. The table plugin needs to be active to wire\n// in the user interaction part of table selections (so that you\n// actually get such selections when you select across cells).\n\nimport {Selection, TextSelection, NodeSelection, SelectionRange} from \"prosemirror-state\"\nimport {Decoration, DecorationSet} from \"prosemirror-view\"\nimport {Fragment, Slice} from \"prosemirror-model\"\n\n\nimport {inSameTable, pointsAtCell, setAttr, removeColSpan} from \"./util\"\nimport {TableMap} from \"./tablemap\"\n\n// ::- A [`Selection`](http://prosemirror.net/docs/ref/#state.Selection)\n// subclass that represents a cell selection spanning part of a table.\n// With the plugin enabled, these will be created when the user\n// selects across cells, and will be drawn by giving selected cells a\n// `selectedCell` CSS class.\nexport class CellSelection extends Selection {\n  // :: (ResolvedPos, ?ResolvedPos)\n  // A table selection is identified by its anchor and head cells. The\n  // positions given to this constructor should point _before_ two\n  // cells in the same table. They may be the same, to select a single\n  // cell.\n  constructor($anchorCell, $headCell = $anchorCell) {\n    let table = $anchorCell.node(-1), map = TableMap.get(table), start = $anchorCell.start(-1)\n    let rect = map.rectBetween($anchorCell.pos - start, $headCell.pos - start)\n    let doc = $anchorCell.node(0)\n    let cells = map.cellsInRect(rect).filter(p => p != $headCell.pos - start)\n    // Make the head cell the first range, so that it counts as the\n    // primary part of the selection\n    cells.unshift($headCell.pos - start)\n    let ranges = cells.map(pos => {\n      let cell = table.nodeAt(pos), from = pos + start + 1\n      return new SelectionRange(doc.resolve(from), doc.resolve(from + cell.content.size))\n    })\n    super(ranges[0].$from, ranges[0].$to, ranges)\n    // :: ResolvedPos\n    // A resolved position pointing _in front of_ the anchor cell (the one\n    // that doesn't move when extending the selection).\n    this.$anchorCell = $anchorCell\n    // :: ResolvedPos\n    // A resolved position pointing in front of the head cell (the one\n    // moves when extending the selection).\n    this.$headCell = $headCell\n  }\n\n  map(doc, mapping) {\n    let $anchorCell = doc.resolve(mapping.map(this.$anchorCell.pos))\n    let $headCell = doc.resolve(mapping.map(this.$headCell.pos))\n    if (pointsAtCell($anchorCell) && pointsAtCell($headCell) && inSameTable($anchorCell, $headCell)) {\n      let tableChanged = this.$anchorCell.node(-1) != $anchorCell.node(-1)\n      if (tableChanged && this.isRowSelection())\n        return CellSelection.rowSelection($anchorCell, $headCell)\n      else if (tableChanged && this.isColSelection())\n        return CellSelection.colSelection($anchorCell, $headCell)\n      else\n        return new CellSelection($anchorCell, $headCell)\n    }\n    return TextSelection.between($anchorCell, $headCell)\n  }\n\n  // :: () → Slice\n  // Returns a rectangular slice of table rows containing the selected\n  // cells.\n  content() {\n    let table = this.$anchorCell.node(-1), map = TableMap.get(table), start = this.$anchorCell.start(-1)\n    let rect = map.rectBetween(this.$anchorCell.pos - start, this.$headCell.pos - start)\n    let seen = {}, rows = []\n    for (let row = rect.top; row < rect.bottom; row++) {\n      let rowContent = []\n      for (let index = row * map.width + rect.left, col = rect.left; col < rect.right; col++, index++) {\n        let pos = map.map[index]\n        if (!seen[pos]) {\n          seen[pos] = true\n          let cellRect = map.findCell(pos), cell = table.nodeAt(pos)\n          let extraLeft = rect.left - cellRect.left, extraRight = cellRect.right - rect.right\n          if (extraLeft > 0 || extraRight > 0) {\n            let attrs = cell.attrs\n            if (extraLeft > 0) attrs = removeColSpan(attrs, 0, extraLeft)\n            if (extraRight > 0) attrs = removeColSpan(attrs, attrs.colspan - extraRight, extraRight)\n            if (cellRect.left < rect.left) cell = cell.type.createAndFill(attrs)\n            else cell = cell.type.create(attrs, cell.content)\n          }\n          if (cellRect.top < rect.top || cellRect.bottom > rect.bottom) {\n            let attrs = setAttr(cell.attrs, \"rowspan\", Math.min(cellRect.bottom, rect.bottom) - Math.max(cellRect.top, rect.top))\n            if (cellRect.top < rect.top) cell = cell.type.createAndFill(attrs)\n            else cell = cell.type.create(attrs, cell.content)\n          }\n          rowContent.push(cell)\n        }\n      }\n      rows.push(table.child(row).copy(Fragment.from(rowContent)))\n    }\n\n    const fragment = this.isColSelection() && this.isRowSelection() ? table : rows;\n    return new Slice(Fragment.from(fragment), 1, 1)\n  }\n\n  replace(tr, content = Slice.empty) {\n    let mapFrom = tr.steps.length, ranges = this.ranges\n    for (let i = 0; i < ranges.length; i++) {\n      let {$from, $to} = ranges[i], mapping = tr.mapping.slice(mapFrom)\n      tr.replace(mapping.map($from.pos), mapping.map($to.pos), i ? Slice.empty : content)\n    }\n    let sel = Selection.findFrom(tr.doc.resolve(tr.mapping.slice(mapFrom).map(this.to)), -1)\n    if (sel) tr.setSelection(sel)\n  }\n\n  replaceWith(tr, node) {\n    this.replace(tr, new Slice(Fragment.from(node), 0, 0))\n  }\n\n  forEachCell(f) {\n    let table = this.$anchorCell.node(-1), map = TableMap.get(table), start = this.$anchorCell.start(-1)\n    let cells = map.cellsInRect(map.rectBetween(this.$anchorCell.pos - start, this.$headCell.pos - start))\n    for (let i = 0; i < cells.length; i++)\n      f(table.nodeAt(cells[i]), start + cells[i])\n  }\n\n  // :: () → bool\n  // True if this selection goes all the way from the top to the\n  // bottom of the table.\n  isColSelection() {\n    let anchorTop = this.$anchorCell.index(-1), headTop = this.$headCell.index(-1)\n    if (Math.min(anchorTop, headTop) > 0) return false\n    let anchorBot = anchorTop + this.$anchorCell.nodeAfter.attrs.rowspan,\n        headBot = headTop + this.$headCell.nodeAfter.attrs.rowspan\n    return Math.max(anchorBot, headBot) == this.$headCell.node(-1).childCount\n  }\n\n  // :: (ResolvedPos, ?ResolvedPos) → CellSelection\n  // Returns the smallest column selection that covers the given anchor\n  // and head cell.\n  static colSelection($anchorCell, $headCell = $anchorCell) {\n    let map = TableMap.get($anchorCell.node(-1)), start = $anchorCell.start(-1)\n    let anchorRect = map.findCell($anchorCell.pos - start), headRect = map.findCell($headCell.pos - start)\n    let doc = $anchorCell.node(0)\n    if (anchorRect.top <= headRect.top) {\n      if (anchorRect.top > 0)\n        $anchorCell = doc.resolve(start + map.map[anchorRect.left])\n      if (headRect.bottom < map.height)\n        $headCell = doc.resolve(start + map.map[map.width * (map.height - 1) + headRect.right - 1])\n    } else {\n      if (headRect.top > 0)\n        $headCell = doc.resolve(start + map.map[headRect.left])\n      if (anchorRect.bottom < map.height)\n        $anchorCell = doc.resolve(start + map.map[map.width * (map.height - 1) + anchorRect.right - 1])\n    }\n    return new CellSelection($anchorCell, $headCell)\n  }\n\n  // :: () → bool\n  // True if this selection goes all the way from the left to the\n  // right of the table.\n  isRowSelection() {\n    let map = TableMap.get(this.$anchorCell.node(-1)), start = this.$anchorCell.start(-1)\n    let anchorLeft = map.colCount(this.$anchorCell.pos - start),\n        headLeft = map.colCount(this.$headCell.pos - start)\n    if (Math.min(anchorLeft, headLeft) > 0) return false\n    let anchorRight = anchorLeft + this.$anchorCell.nodeAfter.attrs.colspan,\n        headRight = headLeft + this.$headCell.nodeAfter.attrs.colspan\n    return Math.max(anchorRight, headRight) == map.width\n  }\n\n  eq(other) {\n    return other instanceof CellSelection && other.$anchorCell.pos == this.$anchorCell.pos &&\n      other.$headCell.pos == this.$headCell.pos\n  }\n\n  // :: (ResolvedPos, ?ResolvedPos) → CellSelection\n  // Returns the smallest row selection that covers the given anchor\n  // and head cell.\n  static rowSelection($anchorCell, $headCell = $anchorCell) {\n    let map = TableMap.get($anchorCell.node(-1)), start = $anchorCell.start(-1)\n    let anchorRect = map.findCell($anchorCell.pos - start), headRect = map.findCell($headCell.pos - start)\n    let doc = $anchorCell.node(0)\n    if (anchorRect.left <= headRect.left) {\n      if (anchorRect.left > 0)\n        $anchorCell = doc.resolve(start + map.map[anchorRect.top * map.width])\n      if (headRect.right < map.width)\n        $headCell = doc.resolve(start + map.map[map.width * (headRect.top + 1) - 1])\n    } else {\n      if (headRect.left > 0)\n        $headCell = doc.resolve(start + map.map[headRect.top * map.width])\n      if (anchorRect.right < map.width)\n        $anchorCell = doc.resolve(start + map.map[map.width * (anchorRect.top + 1) - 1])\n    }\n    return new CellSelection($anchorCell, $headCell)\n  }\n\n  toJSON() {\n    return {type: \"cell\", anchor: this.$anchorCell.pos, head: this.$headCell.pos}\n  }\n\n  static fromJSON(doc, json) {\n    return new CellSelection(doc.resolve(json.anchor), doc.resolve(json.head))\n  }\n\n  // :: (Node, number, ?number) → CellSelection\n  static create(doc, anchorCell, headCell = anchorCell) {\n    return new CellSelection(doc.resolve(anchorCell), doc.resolve(headCell))\n  }\n\n  getBookmark() { return new CellBookmark(this.$anchorCell.pos, this.$headCell.pos) }\n}\n\nCellSelection.prototype.visible = false\n\nSelection.jsonID(\"cell\", CellSelection)\n\nclass CellBookmark {\n  constructor(anchor, head) {\n    this.anchor = anchor\n    this.head = head\n  }\n  map(mapping) {\n    return new CellBookmark(mapping.map(this.anchor), mapping.map(this.head))\n  }\n  resolve(doc) {\n    let $anchorCell = doc.resolve(this.anchor), $headCell = doc.resolve(this.head)\n    if ($anchorCell.parent.type.spec.tableRole == \"row\" &&\n        $headCell.parent.type.spec.tableRole == \"row\" &&\n        $anchorCell.index() < $anchorCell.parent.childCount &&\n        $headCell.index() < $headCell.parent.childCount &&\n        inSameTable($anchorCell, $headCell))\n      return new CellSelection($anchorCell, $headCell)\n    else\n      return Selection.near($headCell, 1)\n  }\n}\n\nexport function drawCellSelection(state) {\n  if (!(state.selection instanceof CellSelection)) return null\n  let cells = []\n  state.selection.forEachCell((node, pos) => {\n    cells.push(Decoration.node(pos, pos + node.nodeSize, {class: \"selectedCell\"}))\n  })\n  return DecorationSet.create(state.doc, cells)\n}\n\nfunction isCellBoundarySelection({$from, $to}) {\n  if ($from.pos == $to.pos || $from.pos < $from.pos - 6) return false // Cheap elimination\n  let afterFrom = $from.pos, beforeTo = $to.pos, depth = $from.depth\n  for (; depth >= 0; depth--, afterFrom++)\n    if ($from.after(depth + 1) < $from.end(depth)) break\n  for (let d = $to.depth; d >= 0; d--, beforeTo--)\n    if ($to.before(d + 1) > $to.start(d)) break\n  return afterFrom == beforeTo && /row|table/.test($from.node(depth).type.spec.tableRole)\n}\n\nfunction isTextSelectionAcrossCells({$from, $to}) {\n  let fromCellBoundaryNode;\n  let toCellBoundaryNode;\n\n  for (let i = $from.depth; i > 0; i--) {\n    let node = $from.node(i);\n    if (node.type.spec.tableRole === 'cell' || node.type.spec.tableRole === 'header_cell') {\n      fromCellBoundaryNode = node;\n      break;\n    }\n  }\n\n  for (let i = $to.depth; i > 0; i--) {\n    let node = $to.node(i);\n    if (node.type.spec.tableRole === 'cell' || node.type.spec.tableRole === 'header_cell') {\n      toCellBoundaryNode = node;\n      break;\n    }\n  }\n\n  return fromCellBoundaryNode !== toCellBoundaryNode && $to.parentOffset === 0\n}\n\nexport function normalizeSelection(state, tr, allowTableNodeSelection) {\n  let sel = (tr || state).selection, doc = (tr || state).doc, normalize, role\n  if (sel instanceof NodeSelection && (role = sel.node.type.spec.tableRole)) {\n    if (role == \"cell\" || role == \"header_cell\") {\n      normalize = CellSelection.create(doc, sel.from)\n    } else if (role == \"row\") {\n      let $cell = doc.resolve(sel.from + 1)\n      normalize = CellSelection.rowSelection($cell, $cell)\n    } else if (!allowTableNodeSelection) {\n      let map = TableMap.get(sel.node), start = sel.from + 1\n      let lastCell = start + map.map[map.width * map.height - 1]\n      normalize = CellSelection.create(doc, start + 1, lastCell)\n    }\n  } else if (sel instanceof TextSelection && isCellBoundarySelection(sel)) {\n    normalize = TextSelection.create(doc, sel.from)\n  } else if (sel instanceof TextSelection && isTextSelectionAcrossCells(sel)) {\n    normalize = TextSelection.create(doc, sel.$from.start(), sel.$from.end());\n  }\n  if (normalize)\n    (tr || (tr = state.tr)).setSelection(normalize)\n  return tr\n}\n","// Utilities used for copy/paste handling.\n//\n// This module handles pasting cell content into tables, or pasting\n// anything into a cell selection, as replacing a block of cells with\n// the content of the selection. When pasting cells into a cell, that\n// involves placing the block of pasted content so that its top left\n// aligns with the selection cell, optionally extending the table to\n// the right or bottom to make sure it is large enough. Pasting into a\n// cell selection is different, here the cells in the selection are\n// clipped to the selection's rectangle, optionally repeating the\n// pasted cells when they are smaller than the selection.\n\nimport {Slice, Fragment} from \"prosemirror-model\"\nimport {Transform} from \"prosemirror-transform\"\n\nimport {setAttr, removeColSpan} from \"./util\"\nimport {TableMap} from \"./tablemap\"\nimport {CellSelection} from \"./cellselection\"\nimport {tableNodeTypes} from \"./schema\"\n\n// Utilities to help with copying and pasting table cells\n\n// : (Slice) → ?{width: number, height: number, rows: [Fragment]}\n// Get a rectangular area of cells from a slice, or null if the outer\n// nodes of the slice aren't table cells or rows.\nexport function pastedCells(slice) {\n  if (!slice.size) return null\n  let {content, openStart, openEnd} = slice\n  while (content.childCount == 1 && (openStart > 0 && openEnd > 0 || content.firstChild.type.spec.tableRole == \"table\")) {\n    openStart--\n    openEnd--\n    content = content.firstChild.content\n  }\n  let first = content.firstChild, role = first.type.spec.tableRole\n  let schema = first.type.schema, rows = []\n  if (role == \"row\") {\n    for (let i = 0; i < content.childCount; i++) {\n      let cells = content.child(i).content\n      let left = i ? 0 : Math.max(0, openStart - 1)\n      let right = i < content.childCount - 1 ? 0 : Math.max(0, openEnd - 1)\n      if (left || right) cells = fitSlice(tableNodeTypes(schema).row, new Slice(cells, left, right)).content\n      rows.push(cells)\n    }\n  } else if (role == \"cell\" || role == \"header_cell\") {\n    rows.push(openStart || openEnd ? fitSlice(tableNodeTypes(schema).row, new Slice(content, openStart, openEnd)).content : content)\n  } else {\n    return null\n  }\n  return ensureRectangular(schema, rows)\n}\n\n// : (Schema, [Fragment]) → {width: number, height: number, rows: [Fragment]}\n// Compute the width and height of a set of cells, and make sure each\n// row has the same number of cells.\nfunction ensureRectangular(schema, rows) {\n  let widths = []\n  for (let i = 0; i < rows.length; i++) {\n    let row = rows[i]\n    for (let j = row.childCount - 1; j >= 0; j--) {\n      let {rowspan, colspan} = row.child(j).attrs\n      for (let r = i; r < i + rowspan; r++)\n        widths[r] = (widths[r] || 0) + colspan\n    }\n  }\n  let width = 0\n  for (let r = 0; r < widths.length; r++) width = Math.max(width, widths[r])\n  for (let r = 0; r < widths.length; r++) {\n    if (r >= rows.length) rows.push(Fragment.empty)\n    if (widths[r] < width) {\n      let empty = tableNodeTypes(schema).cell.createAndFill(), cells = []\n      for (let i = widths[r]; i < width; i++) cells.push(empty)\n      rows[r] = rows[r].append(Fragment.from(cells))\n    }\n  }\n  return {height: rows.length, width, rows}\n}\n\nexport function fitSlice(nodeType, slice) {\n  let node = nodeType.createAndFill()\n  let tr = new Transform(node).replace(0, node.content.size, slice)\n  return tr.doc\n}\n\n// : ({width: number, height: number, rows: [Fragment]}, number, number) → {width: number, height: number, rows: [Fragment]}\n// Clip or extend (repeat) the given set of cells to cover the given\n// width and height. Will clip rowspan/colspan cells at the edges when\n// they stick out.\nexport function clipCells({width, height, rows}, newWidth, newHeight) {\n  if (width != newWidth) {\n    let added = [], newRows = []\n    for (let row = 0; row < rows.length; row++) {\n      let frag = rows[row], cells = []\n      for (let col = added[row] || 0, i = 0; col < newWidth; i++) {\n        let cell = frag.child(i % frag.childCount)\n        if (col + cell.attrs.colspan > newWidth)\n          cell = cell.type.create(removeColSpan(cell.attrs, cell.attrs.colspan, col + cell.attrs.colspan - newWidth), cell.content)\n        cells.push(cell)\n        col += cell.attrs.colspan\n        for (let j = 1; j < cell.attrs.rowspan; j++)\n          added[row + j] = (added[row + j] || 0) + cell.attrs.colspan\n      }\n      newRows.push(Fragment.from(cells))\n    }\n    rows = newRows\n    width = newWidth\n  }\n\n  if (height != newHeight) {\n    let newRows = []\n    for (let row = 0, i = 0; row < newHeight; row++, i++) {\n      let cells = [], source = rows[i % height]\n      for (let j = 0; j < source.childCount; j++) {\n        let cell = source.child(j)\n        if (row + cell.attrs.rowspan > newHeight)\n          cell = cell.type.create(setAttr(cell.attrs, \"rowspan\", Math.max(1, newHeight - cell.attrs.rowspan)), cell.content)\n        cells.push(cell)\n      }\n      newRows.push(Fragment.from(cells))\n    }\n    rows = newRows\n    height = newHeight\n  }\n\n  return {width, height, rows}\n}\n\n// Make sure a table has at least the given width and height. Return\n// true if something was changed.\nfunction growTable(tr, map, table, start, width, height, mapFrom) {\n  let schema = tr.doc.type.schema, types = tableNodeTypes(schema), empty, emptyHead\n  if (width > map.width) {\n    for (let row = 0, rowEnd = 0; row < map.height; row++) {\n      let rowNode = table.child(row)\n      rowEnd += rowNode.nodeSize\n      let cells = [], add\n      if (rowNode.lastChild == null || rowNode.lastChild.type == types.cell)\n        add = empty || (empty = types.cell.createAndFill())\n      else\n        add = emptyHead || (emptyHead = types.header_cell.createAndFill())\n      for (let i = map.width; i < width; i++) cells.push(add)\n      tr.insert(tr.mapping.slice(mapFrom).map(rowEnd - 1 + start), cells)\n    }\n  }\n  if (height > map.height) {\n    let cells = []\n    for (let i = 0, start = (map.height - 1) * map.width; i < Math.max(map.width, width); i++) {\n      let header = i >= map.width ? false :\n          table.nodeAt(map.map[start + i]).type == types.header_cell\n      cells.push(header\n                 ? (emptyHead || (emptyHead = types.header_cell.createAndFill()))\n                 : (empty || (empty = types.cell.createAndFill())))\n    }\n\n    let emptyRow = types.row.create(null, Fragment.from(cells)), rows = []\n    for (let i = map.height; i < height; i++) rows.push(emptyRow)\n    tr.insert(tr.mapping.slice(mapFrom).map(start + table.nodeSize - 2), rows)\n  }\n  return !!(empty || emptyHead)\n}\n\n// Make sure the given line (left, top) to (right, top) doesn't cross\n// any rowspan cells by splitting cells that cross it. Return true if\n// something changed.\nfunction isolateHorizontal(tr, map, table, start, left, right, top, mapFrom) {\n  if (top == 0 || top == map.height) return false\n  let found = false\n  for (let col = left; col < right; col++) {\n    let index = top * map.width + col, pos = map.map[index]\n    if (map.map[index - map.width] == pos) {\n      found = true\n      let cell = table.nodeAt(pos)\n      let {top: cellTop, left: cellLeft} = map.findCell(pos)\n      tr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + start), null, setAttr(cell.attrs, \"rowspan\", top - cellTop))\n      tr.insert(tr.mapping.slice(mapFrom).map(map.positionAt(top, cellLeft, table)),\n                cell.type.createAndFill(setAttr(cell.attrs, \"rowspan\", (cellTop + cell.attrs.rowspan) - top)))\n      col += cell.attrs.colspan - 1\n    }\n  }\n  return found\n}\n\n// Make sure the given line (left, top) to (left, bottom) doesn't\n// cross any colspan cells by splitting cells that cross it. Return\n// true if something changed.\nfunction isolateVertical(tr, map, table, start, top, bottom, left, mapFrom) {\n  if (left == 0 || left == map.width) return false\n  let found = false\n  for (let row = top; row < bottom; row++) {\n    let index = row * map.width + left, pos = map.map[index]\n    if (map.map[index - 1] == pos) {\n      found = true\n      let cell = table.nodeAt(pos), cellLeft = map.colCount(pos)\n      let updatePos = tr.mapping.slice(mapFrom).map(pos + start)\n      tr.setNodeMarkup(updatePos, null, removeColSpan(cell.attrs, left - cellLeft, cell.attrs.colspan - (left - cellLeft)))\n      tr.insert(updatePos + cell.nodeSize, cell.type.createAndFill(removeColSpan(cell.attrs, 0, left - cellLeft)))\n      row += cell.attrs.rowspan - 1\n    }\n  }\n  return found\n}\n\n// Insert the given set of cells (as returned by `pastedCells`) into a\n// table, at the position pointed at by rect.\nexport function insertCells(state, dispatch, tableStart, rect, cells) {\n  let table = tableStart ? state.doc.nodeAt(tableStart - 1) : state.doc, map = TableMap.get(table)\n  let {top, left} = rect\n  let right = left + cells.width, bottom = top + cells.height\n  let tr = state.tr, mapFrom = 0\n  function recomp() {\n    table = tableStart ? tr.doc.nodeAt(tableStart - 1) : tr.doc\n    map = TableMap.get(table)\n    mapFrom = tr.mapping.maps.length\n  }\n  // Prepare the table to be large enough and not have any cells\n  // crossing the boundaries of the rectangle that we want to\n  // insert into. If anything about it changes, recompute the table\n  // map so that subsequent operations can see the current shape.\n  if (growTable(tr, map, table, tableStart, right, bottom, mapFrom)) recomp()\n  if (isolateHorizontal(tr, map, table, tableStart, left, right, top, mapFrom)) recomp()\n  if (isolateHorizontal(tr, map, table, tableStart, left, right, bottom, mapFrom)) recomp()\n  if (isolateVertical(tr, map, table, tableStart, top, bottom, left, mapFrom)) recomp()\n  if (isolateVertical(tr, map, table, tableStart, top, bottom, right, mapFrom)) recomp()\n\n  for (let row = top; row < bottom; row++) {\n    let from = map.positionAt(row, left, table), to = map.positionAt(row, right, table)\n    tr.replace(tr.mapping.slice(mapFrom).map(from + tableStart), tr.mapping.slice(mapFrom).map(to + tableStart),\n               new Slice(cells.rows[row - top], 0, 0))\n  }\n  recomp()\n  tr.setSelection(new CellSelection(tr.doc.resolve(tableStart + map.positionAt(top, left, table)),\n                                    tr.doc.resolve(tableStart + map.positionAt(bottom - 1, right - 1, table))))\n  dispatch(tr)\n}\n","// This file defines helpers for normalizing tables, making sure no\n// cells overlap (which can happen, if you have the wrong col- and\n// rowspans) and that each row has the same width. Uses the problems\n// reported by `TableMap`.\n\nimport {PluginKey} from \"prosemirror-state\"\nimport {TableMap} from \"./tablemap\"\nimport {setAttr, removeColSpan} from \"./util\"\nimport {tableNodeTypes} from \"./schema\"\nimport {key} from \"./util\"\n\nexport const fixTablesKey = new PluginKey(\"fix-tables\")\n\n// Helper for iterating through the nodes in a document that changed\n// compared to the given previous document. Useful for avoiding\n// duplicate work on each transaction.\nfunction changedDescendants(old, cur, offset, f) {\n  let oldSize = old.childCount, curSize = cur.childCount\n  outer: for (let i = 0, j = 0; i < curSize; i++) {\n    let child = cur.child(i)\n    for (let scan = j, e = Math.min(oldSize, i + 3); scan < e; scan++) {\n      if (old.child(scan) == child) {\n        j = scan + 1\n        offset += child.nodeSize\n        continue outer\n      }\n    }\n    f(child, offset)\n    if (j < oldSize && old.child(j).sameMarkup(child))\n      changedDescendants(old.child(j), child, offset + 1, f)\n    else\n      child.nodesBetween(0, child.content.size, f, offset + 1)\n    offset += child.nodeSize\n  }\n}\n\n// :: (EditorState, ?EditorState) → ?Transaction\n// Inspect all tables in the given state's document and return a\n// transaction that fixes them, if necessary. If `oldState` was\n// provided, that is assumed to hold a previous, known-good state,\n// which will be used to avoid re-scanning unchanged parts of the\n// document.\nexport function fixTables(state, oldState) {\n  let tr, check = (node, pos) => {\n    if (node.type.spec.tableRole == \"table\") tr = fixTable(state, node, pos, tr)\n  }\n  if (!oldState) state.doc.descendants(check)\n  else if (oldState.doc != state.doc) changedDescendants(oldState.doc, state.doc, 0, check)\n  return tr\n}\n\n// : (EditorState, Node, number, ?Transaction) → ?Transaction\n// Fix the given table, if necessary. Will append to the transaction\n// it was given, if non-null, or create a new one if necessary.\nexport function fixTable(state, table, tablePos, tr) {\n  let map = TableMap.get(table)\n  if (!map.problems) return tr\n  if (!tr) tr = state.tr\n\n  // Track which rows we must add cells to, so that we can adjust that\n  // when fixing collisions.\n  let mustAdd = []\n  for (let i = 0; i < map.height; i++) mustAdd.push(0)\n  for (let i = 0; i < map.problems.length; i++) {\n    let prob = map.problems[i]\n    if (prob.type == \"collision\") {\n      let cell = table.nodeAt(prob.pos)\n      for (let j = 0; j < cell.attrs.rowspan; j++) mustAdd[prob.row + j] += prob.n\n      tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, removeColSpan(cell.attrs, cell.attrs.colspan - prob.n, prob.n))\n    } else if (prob.type == \"missing\") {\n      mustAdd[prob.row] += prob.n\n    } else if (prob.type == \"overlong_rowspan\") {\n      let cell = table.nodeAt(prob.pos)\n      tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, setAttr(cell.attrs, \"rowspan\", cell.attrs.rowspan - prob.n))\n    } else if (prob.type == \"colwidth mismatch\") {\n      let cell = table.nodeAt(prob.pos)\n      tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, setAttr(cell.attrs, \"colwidth\", prob.colwidth))\n    }\n  }\n  let first, last\n  for (let i = 0; i < mustAdd.length; i++) if (mustAdd[i]) {\n    if (first == null) first = i\n    last = i\n  }\n  // Add the necessary cells, using a heuristic for whether to add the\n  // cells at the start or end of the rows (if it looks like a 'bite'\n  // was taken out of the table, add cells at the start of the row\n  // after the bite. Otherwise add them at the end).\n  for (let i = 0, pos = tablePos + 1; i < map.height; i++) {\n    let row = table.child(i)\n    let end = pos + row.nodeSize\n    let add = mustAdd[i]\n    if (add > 0) {\n      let tableNodeType = 'cell';\n      if (row.firstChild) {\n        tableNodeType = row.firstChild.type.spec.tableRole\n      }\n      let nodes = []\n      for (let j = 0; j < add; j++)\n        nodes.push(tableNodeTypes(state.schema)[tableNodeType].createAndFill())\n      let side = (i == 0 || first == i - 1) && last == i ? pos + 1 : end - 1\n      tr.insert(tr.mapping.map(side), nodes)\n    }\n    pos = end\n  }\n  return tr.setMeta(fixTablesKey, { fixTables: true })\n}\n","export class TableView {\n  constructor(node, cellMinWidth) {\n    this.node = node\n    this.cellMinWidth = cellMinWidth\n    this.dom = document.createElement(\"div\")\n    this.dom.className = \"tableWrapper\"\n    this.table = this.dom.appendChild(document.createElement(\"table\"))\n    this.colgroup = this.table.appendChild(document.createElement(\"colgroup\"))\n    updateColumns(node, this.colgroup, this.table, cellMinWidth)\n    this.contentDOM = this.table.appendChild(document.createElement(\"tbody\"))\n  }\n\n  update(node) {\n    if (node.type != this.node.type) return false\n    this.node = node\n    updateColumns(node, this.colgroup, this.table, this.cellMinWidth)\n    return true\n  }\n\n  ignoreMutation(record) {\n    return record.type == \"attributes\" && (record.target == this.table || this.colgroup.contains(record.target))\n  }\n}\n\nexport function updateColumns(node, colgroup, table, cellMinWidth, overrideCol, overrideValue) {\n  let totalWidth = 0, fixedWidth = true\n  let nextDOM = colgroup.firstChild, row = node.firstChild\n  for (let i = 0, col = 0; i < row.childCount; i++) {\n    let {colspan, colwidth} = row.child(i).attrs\n    for (let j = 0; j < colspan; j++, col++) {\n      let hasWidth = overrideCol == col ? overrideValue : colwidth && colwidth[j]\n      let cssWidth = hasWidth ? hasWidth + \"px\" : \"\"\n      totalWidth += hasWidth || cellMinWidth\n      if (!hasWidth) fixedWidth = false\n      if (!nextDOM) {\n        colgroup.appendChild(document.createElement(\"col\")).style.width = cssWidth\n      } else {\n        if (nextDOM.style.width != cssWidth) nextDOM.style.width = cssWidth\n        nextDOM = nextDOM.nextSibling\n      }\n    }\n  }\n\n  while (nextDOM) {\n    let after = nextDOM.nextSibling\n    nextDOM.parentNode.removeChild(nextDOM)\n    nextDOM = after\n  }\n\n  if (fixedWidth) {\n    table.style.width = totalWidth + \"px\"\n    table.style.minWidth = \"\"\n  } else {\n    table.style.width = \"\"\n    table.style.minWidth = totalWidth + \"px\"\n  }\n}\n","import {Plugin, PluginKey} from \"prosemirror-state\"\nimport {Decoration, DecorationSet} from \"prosemirror-view\"\nimport {cellAround, pointsAtCell, setAttr} from \"./util\"\nimport {TableMap} from \"./tablemap\"\nimport {TableView, updateColumns} from \"./tableview\"\nimport {tableNodeTypes} from \"./schema\"\n\nexport const key = new PluginKey(\"tableColumnResizing\")\n\nexport function columnResizing({ handleWidth = 5, cellMinWidth = 25, View = TableView, lastColumnResizable = true } = {}) {\n  let plugin = new Plugin({\n    key,\n    state: {\n      init(_, state) {\n        this.spec.props.nodeViews[tableNodeTypes(state.schema).table.name] =\n          (node, view) => new View(node, cellMinWidth, view)\n        return new ResizeState(-1, false)\n      },\n      apply(tr, prev) {\n        return prev.apply(tr)\n      }\n    },\n    props: {\n      attributes(state) {\n        let pluginState = key.getState(state)\n        return pluginState.activeHandle > -1 ? {class: \"resize-cursor\"} : null\n      },\n\n      handleDOMEvents: {\n        mousemove(view, event) { handleMouseMove(view, event, handleWidth, cellMinWidth, lastColumnResizable) },\n        mouseleave(view) { handleMouseLeave(view) },\n        mousedown(view, event) { handleMouseDown(view, event, cellMinWidth) }\n      },\n\n      decorations(state) {\n        let pluginState = key.getState(state)\n        if (pluginState.activeHandle > -1) return handleDecorations(state, pluginState.activeHandle)\n      },\n\n      nodeViews: {}\n    }\n  })\n  return plugin\n}\n\nclass ResizeState {\n  constructor(activeHandle, dragging) {\n    this.activeHandle = activeHandle\n    this.dragging = dragging\n  }\n\n  apply(tr) {\n    let state = this, action = tr.getMeta(key)\n    if (action && action.setHandle != null)\n      return new ResizeState(action.setHandle, null)\n    if (action && action.setDragging !== undefined)\n      return new ResizeState(state.activeHandle, action.setDragging)\n    if (state.activeHandle > -1 && tr.docChanged) {\n      let handle = tr.mapping.map(state.activeHandle, -1)\n      if (!pointsAtCell(tr.doc.resolve(handle))) handle = null\n      state = new ResizeState(handle, state.dragging)\n    }\n    return state\n  }\n}\n\nfunction handleMouseMove(view, event, handleWidth, cellMinWidth, lastColumnResizable) {\n  let pluginState = key.getState(view.state)\n\n  if (!pluginState.dragging) {\n    let target = domCellAround(event.target), cell = -1\n    if (target) {\n      let {left, right} = target.getBoundingClientRect()\n      if (event.clientX - left <= handleWidth)\n        cell = edgeCell(view, event, \"left\")\n      else if (right - event.clientX <= handleWidth)\n        cell = edgeCell(view, event, \"right\")\n    }\n\n    if (cell != pluginState.activeHandle) {\n      if (!lastColumnResizable && cell !== -1) {\n        let $cell = view.state.doc.resolve(cell)\n        let table = $cell.node(-1), map = TableMap.get(table), start = $cell.start(-1)\n        let col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1\n\n        if (col == map.width - 1) {\n          return\n        }\n      }\n\n      updateHandle(view, cell)\n    }\n  }\n}\n\nfunction handleMouseLeave(view) {\n  let pluginState = key.getState(view.state)\n  if (pluginState.activeHandle > -1 && !pluginState.dragging) updateHandle(view, -1)\n}\n\nfunction handleMouseDown(view, event, cellMinWidth) {\n  let pluginState = key.getState(view.state)\n  if (pluginState.activeHandle == -1 || pluginState.dragging) return false\n\n  let cell = view.state.doc.nodeAt(pluginState.activeHandle)\n  let width = currentColWidth(view, pluginState.activeHandle, cell.attrs)\n  view.dispatch(view.state.tr.setMeta(key, {setDragging: {startX: event.clientX, startWidth: width}}))\n\n  function finish(event) {\n    window.removeEventListener(\"mouseup\", finish)\n    window.removeEventListener(\"mousemove\", move)\n    let pluginState = key.getState(view.state)\n    if (pluginState.dragging) {\n      updateColumnWidth(view, pluginState.activeHandle, draggedWidth(pluginState.dragging, event, cellMinWidth))\n      view.dispatch(view.state.tr.setMeta(key, {setDragging: null}))\n    }\n  }\n  function move(event) {\n    if (!event.which) return finish(event)\n    let pluginState = key.getState(view.state)\n    let dragged = draggedWidth(pluginState.dragging, event, cellMinWidth)\n    displayColumnWidth(view, pluginState.activeHandle, dragged, cellMinWidth)\n  }\n\n  window.addEventListener(\"mouseup\", finish)\n  window.addEventListener(\"mousemove\", move)\n  event.preventDefault()\n  return true\n}\n\nfunction currentColWidth(view, cellPos, {colspan, colwidth}) {\n  let width = colwidth && colwidth[colwidth.length - 1]\n  if (width) return width\n  let dom = view.domAtPos(cellPos)\n  let node = dom.node.childNodes[dom.offset]\n  let domWidth = node.offsetWidth, parts = colspan\n  if (colwidth) for (let i = 0; i < colspan; i++) if (colwidth[i]) {\n    domWidth -= colwidth[i]\n    parts--\n  }\n  return domWidth / parts\n}\n\nfunction domCellAround(target) {\n  while (target && target.nodeName != \"TD\" && target.nodeName != \"TH\")\n    target = target.classList.contains(\"ProseMirror\") ? null : target.parentNode\n  return target\n}\n\nfunction edgeCell(view, event, side) {\n  let found = view.posAtCoords({left: event.clientX, top: event.clientY})\n  if (!found) return -1\n  let {pos} = found\n  let $cell = cellAround(view.state.doc.resolve(pos))\n  if (!$cell) return -1\n  if (side == \"right\") return $cell.pos\n  let map = TableMap.get($cell.node(-1)), start = $cell.start(-1)\n  let index = map.map.indexOf($cell.pos - start)\n  return index % map.width == 0 ? -1 : start + map.map[index - 1]\n}\n\nfunction draggedWidth(dragging, event, cellMinWidth) {\n  let offset = event.clientX - dragging.startX\n  return Math.max(cellMinWidth, dragging.startWidth + offset)\n}\n\nfunction updateHandle(view, value) {\n  view.dispatch(view.state.tr.setMeta(key, {setHandle: value}))\n}\n\nfunction updateColumnWidth(view, cell, width) {\n  let $cell = view.state.doc.resolve(cell)\n  let table = $cell.node(-1), map = TableMap.get(table), start = $cell.start(-1)\n  let col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1\n  let tr = view.state.tr\n  for (let row = 0; row < map.height; row++) {\n    let mapIndex = row * map.width + col\n    // Rowspanning cell that has already been handled\n    if (row && map.map[mapIndex] == map.map[mapIndex - map.width]) continue\n    let pos = map.map[mapIndex], {attrs} = table.nodeAt(pos)\n    let index = attrs.colspan == 1 ? 0 : col - map.colCount(pos)\n    if (attrs.colwidth && attrs.colwidth[index] == width) continue\n    let colwidth = attrs.colwidth ? attrs.colwidth.slice() : zeroes(attrs.colspan)\n    colwidth[index] = width\n    tr.setNodeMarkup(start + pos, null, setAttr(attrs, \"colwidth\", colwidth))\n  }\n  if (tr.docChanged) view.dispatch(tr)\n}\n\nfunction displayColumnWidth(view, cell, width, cellMinWidth) {\n  let $cell = view.state.doc.resolve(cell)\n  let table = $cell.node(-1), start = $cell.start(-1)\n  let col = TableMap.get(table).colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1\n  let dom = view.domAtPos($cell.start(-1)).node\n  while (dom.nodeName != \"TABLE\") dom = dom.parentNode\n  updateColumns(table, dom.firstChild, dom, cellMinWidth, col, width)\n}\n\nfunction zeroes(n) {\n  let result = []\n  for (let i = 0; i < n; i++) result.push(0)\n  return result\n}\n\nfunction handleDecorations(state, cell) {\n  let decorations = []\n  let $cell = state.doc.resolve(cell)\n  let table = $cell.node(-1), map = TableMap.get(table), start = $cell.start(-1)\n  let col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan\n  for (let row = 0; row < map.height; row++) {\n    let index = col + row * map.width - 1\n    // For positions that are have either a different cell or the end\n    // of the table to their right, and either the top of the table or\n    // a different cell above them, add a decoration\n    if ((col == map.width || map.map[index] != map.map[index + 1]) &&\n        (row == 0 || map.map[index - 1] != map.map[index - 1 - map.width])) {\n      let cellPos = map.map[index]\n      let pos = start + cellPos + table.nodeAt(cellPos).nodeSize - 1\n      let dom = document.createElement(\"div\")\n      dom.className = \"column-resize-handle\"\n      decorations.push(Decoration.widget(pos, dom))\n    }\n  }\n  return DecorationSet.create(state.doc, decorations)\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  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 = Gp.constructor = GeneratorFunctionPrototype;\n  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  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  Gp[iteratorSymbol] = function() {\n    return this;\n  };\n\n  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, 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  Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","'use strict';\n\n\nmodule.exports = require('./lib/');\n","// HTML5 entities map: { name -> utf16string }\n//\n'use strict';\n\n/*eslint quotes:0*/\nmodule.exports = require('entities/lib/maps/entities.json');\n","'use strict';\n\n\nmodule.exports.encode = require('./encode');\nmodule.exports.decode = require('./decode');\nmodule.exports.format = require('./format');\nmodule.exports.parse  = require('./parse');\n","module.exports=/[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/","module.exports=/[\\0-\\x1F\\x7F-\\x9F]/","module.exports=/[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/","// Regexps to match html elements\n\n'use strict';\n\nvar attr_name     = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\n\nvar unquoted      = '[^\"\\'=<>`\\\\x00-\\\\x20]+';\nvar single_quoted = \"'[^']*'\";\nvar double_quoted = '\"[^\"]*\"';\n\nvar attr_value  = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')';\n\nvar attribute   = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)';\n\nvar open_tag    = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\n\nvar close_tag   = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment     = '<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->';\nvar processing  = '<[?].*?[?]>';\nvar declaration = '<![A-Z]+\\\\s+[^>]*>';\nvar cdata       = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>';\n\nvar HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n                        '|' + processing + '|' + declaration + '|' + cdata + ')');\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')');\n\nmodule.exports.HTML_TAG_RE = HTML_TAG_RE;\nmodule.exports.HTML_OPEN_CLOSE_TAG_RE = HTML_OPEN_CLOSE_TAG_RE;\n","// ~~strike through~~\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function strikethrough(state, silent) {\n  var i, scanned, token, len, ch,\n      start = state.pos,\n      marker = state.src.charCodeAt(start);\n\n  if (silent) { return false; }\n\n  if (marker !== 0x7E/* ~ */) { return false; }\n\n  scanned = state.scanDelims(state.pos, true);\n  len = scanned.length;\n  ch = String.fromCharCode(marker);\n\n  if (len < 2) { return false; }\n\n  if (len % 2) {\n    token         = state.push('text', '', 0);\n    token.content = ch;\n    len--;\n  }\n\n  for (i = 0; i < len; i += 2) {\n    token         = state.push('text', '', 0);\n    token.content = ch + ch;\n\n    state.delimiters.push({\n      marker: marker,\n      length: 0, // disable \"rule of 3\" length checks meant for emphasis\n      jump:   i,\n      token:  state.tokens.length - 1,\n      end:    -1,\n      open:   scanned.can_open,\n      close:  scanned.can_close\n    });\n  }\n\n  state.pos += scanned.length;\n\n  return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n  var i, j,\n      startDelim,\n      endDelim,\n      token,\n      loneMarkers = [],\n      max = delimiters.length;\n\n  for (i = 0; i < max; i++) {\n    startDelim = delimiters[i];\n\n    if (startDelim.marker !== 0x7E/* ~ */) {\n      continue;\n    }\n\n    if (startDelim.end === -1) {\n      continue;\n    }\n\n    endDelim = delimiters[startDelim.end];\n\n    token         = state.tokens[startDelim.token];\n    token.type    = 's_open';\n    token.tag     = 's';\n    token.nesting = 1;\n    token.markup  = '~~';\n    token.content = '';\n\n    token         = state.tokens[endDelim.token];\n    token.type    = 's_close';\n    token.tag     = 's';\n    token.nesting = -1;\n    token.markup  = '~~';\n    token.content = '';\n\n    if (state.tokens[endDelim.token - 1].type === 'text' &&\n        state.tokens[endDelim.token - 1].content === '~') {\n\n      loneMarkers.push(endDelim.token - 1);\n    }\n  }\n\n  // If a marker sequence has an odd number of characters, it's splitted\n  // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n  // start of the sequence.\n  //\n  // So, we have to move all those markers after subsequent s_close tags.\n  //\n  while (loneMarkers.length) {\n    i = loneMarkers.pop();\n    j = i + 1;\n\n    while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n      j++;\n    }\n\n    j--;\n\n    if (i !== j) {\n      token = state.tokens[j];\n      state.tokens[j] = state.tokens[i];\n      state.tokens[i] = token;\n    }\n  }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function strikethrough(state) {\n  var curr,\n      tokens_meta = state.tokens_meta,\n      max = state.tokens_meta.length;\n\n  postProcess(state, state.delimiters);\n\n  for (curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      postProcess(state, tokens_meta[curr].delimiters);\n    }\n  }\n};\n","// Process *this* and _that_\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function emphasis(state, silent) {\n  var i, scanned, token,\n      start = state.pos,\n      marker = state.src.charCodeAt(start);\n\n  if (silent) { return false; }\n\n  if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false; }\n\n  scanned = state.scanDelims(state.pos, marker === 0x2A);\n\n  for (i = 0; i < scanned.length; i++) {\n    token         = state.push('text', '', 0);\n    token.content = String.fromCharCode(marker);\n\n    state.delimiters.push({\n      // Char code of the starting marker (number).\n      //\n      marker: marker,\n\n      // Total length of these series of delimiters.\n      //\n      length: scanned.length,\n\n      // An amount of characters before this one that's equivalent to\n      // current one. In plain English: if this delimiter does not open\n      // an emphasis, neither do previous `jump` characters.\n      //\n      // Used to skip sequences like \"*****\" in one step, for 1st asterisk\n      // value will be 0, for 2nd it's 1 and so on.\n      //\n      jump:   i,\n\n      // A position of the token this delimiter corresponds to.\n      //\n      token:  state.tokens.length - 1,\n\n      // If this delimiter is matched as a valid opener, `end` will be\n      // equal to its position, otherwise it's `-1`.\n      //\n      end:    -1,\n\n      // Boolean flags that determine if this delimiter could open or close\n      // an emphasis.\n      //\n      open:   scanned.can_open,\n      close:  scanned.can_close\n    });\n  }\n\n  state.pos += scanned.length;\n\n  return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n  var i,\n      startDelim,\n      endDelim,\n      token,\n      ch,\n      isStrong,\n      max = delimiters.length;\n\n  for (i = max - 1; i >= 0; i--) {\n    startDelim = delimiters[i];\n\n    if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n      continue;\n    }\n\n    // Process only opening markers\n    if (startDelim.end === -1) {\n      continue;\n    }\n\n    endDelim = delimiters[startDelim.end];\n\n    // If the previous delimiter has the same marker and is adjacent to this one,\n    // merge those into one strong delimiter.\n    //\n    // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n    //\n    isStrong = i > 0 &&\n               delimiters[i - 1].end === startDelim.end + 1 &&\n               delimiters[i - 1].token === startDelim.token - 1 &&\n               delimiters[startDelim.end + 1].token === endDelim.token + 1 &&\n               delimiters[i - 1].marker === startDelim.marker;\n\n    ch = String.fromCharCode(startDelim.marker);\n\n    token         = state.tokens[startDelim.token];\n    token.type    = isStrong ? 'strong_open' : 'em_open';\n    token.tag     = isStrong ? 'strong' : 'em';\n    token.nesting = 1;\n    token.markup  = isStrong ? ch + ch : ch;\n    token.content = '';\n\n    token         = state.tokens[endDelim.token];\n    token.type    = isStrong ? 'strong_close' : 'em_close';\n    token.tag     = isStrong ? 'strong' : 'em';\n    token.nesting = -1;\n    token.markup  = isStrong ? ch + ch : ch;\n    token.content = '';\n\n    if (isStrong) {\n      state.tokens[delimiters[i - 1].token].content = '';\n      state.tokens[delimiters[startDelim.end + 1].token].content = '';\n      i--;\n    }\n  }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function emphasis(state) {\n  var curr,\n      tokens_meta = state.tokens_meta,\n      max = state.tokens_meta.length;\n\n  postProcess(state, state.delimiters);\n\n  for (curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      postProcess(state, tokens_meta[curr].delimiters);\n    }\n  }\n};\n","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"NextcloudMoment\"] = factory();\n\telse\n\t\troot[\"NextcloudMoment\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n","module.exports = require(\"moment\");","module.exports = require(\"node-gettext\");","module.exports = require(\"@nextcloud/l10n\");","import moment from 'moment'\nimport Gettext from 'node-gettext'\nimport { getLocale } from '@nextcloud/l10n'\n\nconst gt = new Gettext()\n\nconst locale = getLocale()\nLOCALES.map(data => {\n    gt.addTranslations(data.locale, 'messages', data.json)\n})\ngt.setLocale(locale)\nmoment.locale(locale)\n\nmoment.updateLocale(\n    moment.locale(),\n    {\n        parentLocale: moment.locale(),\n        relativeTime: Object.assign(\n            // @ts-ignore\n            moment.localeData(moment.locale())._relativeTime,\n            {\n                s: gt.gettext('seconds'),\n            }\n        )\n    })\n\nexport default moment\n","'use strict'\n\nvar high = require('highlight.js/lib/core')\nvar fault = require('fault')\n\nexports.highlight = highlight\nexports.highlightAuto = highlightAuto\nexports.registerLanguage = registerLanguage\nexports.listLanguages = listLanguages\nexports.registerAlias = registerAlias\n\nEmitter.prototype.addText = text\nEmitter.prototype.addKeyword = addKeyword\nEmitter.prototype.addSublanguage = addSublanguage\nEmitter.prototype.openNode = open\nEmitter.prototype.closeNode = close\nEmitter.prototype.closeAllNodes = noop\nEmitter.prototype.finalize = noop\nEmitter.prototype.toHTML = toHtmlNoop\n\nvar defaultPrefix = 'hljs-'\n\n// Highlighting `value` in the language `name`.\nfunction highlight(name, value, options) {\n  var before = high.configure({})\n  var settings = options || {}\n  var prefix = settings.prefix\n  var result\n\n  if (typeof name !== 'string') {\n    throw fault('Expected `string` for name, got `%s`', name)\n  }\n\n  if (!high.getLanguage(name)) {\n    throw fault('Unknown language: `%s` is not registered', name)\n  }\n\n  if (typeof value !== 'string') {\n    throw fault('Expected `string` for value, got `%s`', value)\n  }\n\n  if (prefix === null || prefix === undefined) {\n    prefix = defaultPrefix\n  }\n\n  high.configure({__emitter: Emitter, classPrefix: prefix})\n\n  result = high.highlight(name, value, true)\n\n  high.configure(before)\n\n  /* istanbul ignore if - Highlight.js seems to use this (currently) for broken\n   * grammars, so let’s keep it in there just to be sure. */\n  if (result.errorRaised) {\n    throw result.errorRaised\n  }\n\n  return {\n    relevance: result.relevance,\n    language: result.language,\n    value: result.emitter.rootNode.children\n  }\n}\n\nfunction highlightAuto(value, options) {\n  var settings = options || {}\n  var subset = settings.subset || high.listLanguages()\n  var prefix = settings.prefix\n  var length = subset.length\n  var index = -1\n  var result\n  var secondBest\n  var current\n  var name\n\n  if (prefix === null || prefix === undefined) {\n    prefix = defaultPrefix\n  }\n\n  if (typeof value !== 'string') {\n    throw fault('Expected `string` for value, got `%s`', value)\n  }\n\n  secondBest = {relevance: 0, language: null, value: []}\n  result = {relevance: 0, language: null, value: []}\n\n  while (++index < length) {\n    name = subset[index]\n\n    if (!high.getLanguage(name)) {\n      continue\n    }\n\n    current = highlight(name, value, options)\n    current.language = name\n\n    if (current.relevance > secondBest.relevance) {\n      secondBest = current\n    }\n\n    if (current.relevance > result.relevance) {\n      secondBest = result\n      result = current\n    }\n  }\n\n  if (secondBest.language) {\n    result.secondBest = secondBest\n  }\n\n  return result\n}\n\n// Register a language.\nfunction registerLanguage(name, syntax) {\n  high.registerLanguage(name, syntax)\n}\n\n// Get a list of all registered languages.\nfunction listLanguages() {\n  return high.listLanguages()\n}\n\n// Register more aliases for an already registered language.\nfunction registerAlias(name, alias) {\n  var map = name\n  var key\n\n  if (alias) {\n    map = {}\n    map[name] = alias\n  }\n\n  for (key in map) {\n    high.registerAliases(map[key], {languageName: key})\n  }\n}\n\nfunction Emitter(options) {\n  this.options = options\n  this.rootNode = {children: []}\n  this.stack = [this.rootNode]\n}\n\nfunction addKeyword(value, name) {\n  this.openNode(name)\n  this.addText(value)\n  this.closeNode()\n}\n\nfunction addSublanguage(other, name) {\n  var stack = this.stack\n  var current = stack[stack.length - 1]\n  var results = other.rootNode.children\n  var node = name\n    ? {\n        type: 'element',\n        tagName: 'span',\n        properties: {className: [name]},\n        children: results\n      }\n    : results\n\n  current.children = current.children.concat(node)\n}\n\nfunction text(value) {\n  var stack = this.stack\n  var current\n  var tail\n\n  if (value === '') return\n\n  current = stack[stack.length - 1]\n  tail = current.children[current.children.length - 1]\n\n  if (tail && tail.type === 'text') {\n    tail.value += value\n  } else {\n    current.children.push({type: 'text', value: value})\n  }\n}\n\nfunction open(name) {\n  var stack = this.stack\n  var className = this.options.classPrefix + name\n  var current = stack[stack.length - 1]\n  var child = {\n    type: 'element',\n    tagName: 'span',\n    properties: {className: [className]},\n    children: []\n  }\n\n  current.children.push(child)\n  stack.push(child)\n}\n\nfunction close() {\n  this.stack.pop()\n}\n\nfunction toHtmlNoop() {\n  return ''\n}\n\nfunction noop() {}\n","// https://github.com/substack/deep-freeze/blob/master/index.js\n/** @param {any} obj */\nfunction deepFreeze(obj) {\n  Object.freeze(obj);\n\n  var objIsFunction = typeof obj === 'function';\n\n  Object.getOwnPropertyNames(obj).forEach(function(prop) {\n    if (Object.hasOwnProperty.call(obj, prop)\n    && obj[prop] !== null\n    && (typeof obj[prop] === \"object\" || typeof obj[prop] === \"function\")\n    // IE11 fix: https://github.com/highlightjs/highlight.js/issues/2318\n    // TODO: remove in the future\n    && (objIsFunction ? prop !== 'caller' && prop !== 'callee' && prop !== 'arguments' : true)\n    && !Object.isFrozen(obj[prop])) {\n      deepFreeze(obj[prop]);\n    }\n  });\n\n  return obj;\n}\n\nclass Response {\n  /**\n   * @param {CompiledMode} mode\n   */\n  constructor(mode) {\n    // eslint-disable-next-line no-undefined\n    if (mode.data === undefined) mode.data = {};\n\n    this.data = mode.data;\n  }\n\n  ignoreMatch() {\n    this.ignore = true;\n  }\n}\n\n/**\n * @param {string} value\n * @returns {string}\n */\nfunction escapeHTML(value) {\n  return value\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&#x27;');\n}\n\n/**\n * performs a shallow merge of multiple objects into one\n *\n * @template T\n * @param {T} original\n * @param {Record<string,any>[]} objects\n * @returns {T} a single new object\n */\nfunction inherit(original, ...objects) {\n  /** @type Record<string,any> */\n  var result = {};\n\n  for (const key in original) {\n    result[key] = original[key];\n  }\n  objects.forEach(function(obj) {\n    for (const key in obj) {\n      result[key] = obj[key];\n    }\n  });\n  return /** @type {T} */ (result);\n}\n\n/* Stream merging */\n\n/**\n * @typedef Event\n * @property {'start'|'stop'} event\n * @property {number} offset\n * @property {Node} node\n */\n\n/**\n * @param {Node} node\n */\nfunction tag(node) {\n  return node.nodeName.toLowerCase();\n}\n\n/**\n * @param {Node} node\n */\nfunction nodeStream(node) {\n  /** @type Event[] */\n  var result = [];\n  (function _nodeStream(node, offset) {\n    for (var child = node.firstChild; child; child = child.nextSibling) {\n      if (child.nodeType === 3) {\n        offset += child.nodeValue.length;\n      } else if (child.nodeType === 1) {\n        result.push({\n          event: 'start',\n          offset: offset,\n          node: child\n        });\n        offset = _nodeStream(child, offset);\n        // Prevent void elements from having an end tag that would actually\n        // double them in the output. There are more void elements in HTML\n        // but we list only those realistically expected in code display.\n        if (!tag(child).match(/br|hr|img|input/)) {\n          result.push({\n            event: 'stop',\n            offset: offset,\n            node: child\n          });\n        }\n      }\n    }\n    return offset;\n  })(node, 0);\n  return result;\n}\n\n/**\n * @param {any} original - the original stream\n * @param {any} highlighted - stream of the highlighted source\n * @param {string} value - the original source itself\n */\nfunction mergeStreams(original, highlighted, value) {\n  var processed = 0;\n  var result = '';\n  var nodeStack = [];\n\n  function selectStream() {\n    if (!original.length || !highlighted.length) {\n      return original.length ? original : highlighted;\n    }\n    if (original[0].offset !== highlighted[0].offset) {\n      return (original[0].offset < highlighted[0].offset) ? original : highlighted;\n    }\n\n    /*\n    To avoid starting the stream just before it should stop the order is\n    ensured that original always starts first and closes last:\n\n    if (event1 == 'start' && event2 == 'start')\n      return original;\n    if (event1 == 'start' && event2 == 'stop')\n      return highlighted;\n    if (event1 == 'stop' && event2 == 'start')\n      return original;\n    if (event1 == 'stop' && event2 == 'stop')\n      return highlighted;\n\n    ... which is collapsed to:\n    */\n    return highlighted[0].event === 'start' ? original : highlighted;\n  }\n\n  /**\n   * @param {Node} node\n   */\n  function open(node) {\n    /** @param {Attr} attr */\n    function attr_str(attr) {\n      return ' ' + attr.nodeName + '=\"' + escapeHTML(attr.value) + '\"';\n    }\n    // @ts-ignore\n    result += '<' + tag(node) + [].map.call(node.attributes, attr_str).join('') + '>';\n  }\n\n  /**\n   * @param {Node} node\n   */\n  function close(node) {\n    result += '</' + tag(node) + '>';\n  }\n\n  /**\n   * @param {Event} event\n   */\n  function render(event) {\n    (event.event === 'start' ? open : close)(event.node);\n  }\n\n  while (original.length || highlighted.length) {\n    var stream = selectStream();\n    result += escapeHTML(value.substring(processed, stream[0].offset));\n    processed = stream[0].offset;\n    if (stream === original) {\n      /*\n      On any opening or closing tag of the original markup we first close\n      the entire highlighted node stack, then render the original tag along\n      with all the following original tags at the same offset and then\n      reopen all the tags on the highlighted stack.\n      */\n      nodeStack.reverse().forEach(close);\n      do {\n        render(stream.splice(0, 1)[0]);\n        stream = selectStream();\n      } while (stream === original && stream.length && stream[0].offset === processed);\n      nodeStack.reverse().forEach(open);\n    } else {\n      if (stream[0].event === 'start') {\n        nodeStack.push(stream[0].node);\n      } else {\n        nodeStack.pop();\n      }\n      render(stream.splice(0, 1)[0]);\n    }\n  }\n  return result + escapeHTML(value.substr(processed));\n}\n\nvar utils = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  escapeHTML: escapeHTML,\n  inherit: inherit,\n  nodeStream: nodeStream,\n  mergeStreams: mergeStreams\n});\n\n/**\n * @typedef {object} Renderer\n * @property {(text: string) => void} addText\n * @property {(node: Node) => void} openNode\n * @property {(node: Node) => void} closeNode\n * @property {() => string} value\n */\n\n/** @typedef {{kind?: string, sublanguage?: boolean}} Node */\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\n/** */\n\nconst SPAN_CLOSE = '</span>';\n\n/**\n * Determines if a node needs to be wrapped in <span>\n *\n * @param {Node} node */\nconst emitsWrappingTags = (node) => {\n  return !!node.kind;\n};\n\n/** @type {Renderer} */\nclass HTMLRenderer {\n  /**\n   * Creates a new HTMLRenderer\n   *\n   * @param {Tree} parseTree - the parse tree (must support `walk` API)\n   * @param {{classPrefix: string}} options\n   */\n  constructor(parseTree, options) {\n    this.buffer = \"\";\n    this.classPrefix = options.classPrefix;\n    parseTree.walk(this);\n  }\n\n  /**\n   * Adds texts to the output stream\n   *\n   * @param {string} text */\n  addText(text) {\n    this.buffer += escapeHTML(text);\n  }\n\n  /**\n   * Adds a node open to the output stream (if needed)\n   *\n   * @param {Node} node */\n  openNode(node) {\n    if (!emitsWrappingTags(node)) return;\n\n    let className = node.kind;\n    if (!node.sublanguage) {\n      className = `${this.classPrefix}${className}`;\n    }\n    this.span(className);\n  }\n\n  /**\n   * Adds a node close to the output stream (if needed)\n   *\n   * @param {Node} node */\n  closeNode(node) {\n    if (!emitsWrappingTags(node)) return;\n\n    this.buffer += SPAN_CLOSE;\n  }\n\n  /**\n   * returns the accumulated buffer\n  */\n  value() {\n    return this.buffer;\n  }\n\n  // helpers\n\n  /**\n   * Builds a span element\n   *\n   * @param {string} className */\n  span(className) {\n    this.buffer += `<span class=\"${className}\">`;\n  }\n}\n\n/** @typedef {{kind?: string, sublanguage?: boolean, children: Node[]} | string} Node */\n/** @typedef {{kind?: string, sublanguage?: boolean, children: Node[]} } DataNode */\n/**  */\n\nclass TokenTree {\n  constructor() {\n    /** @type DataNode */\n    this.rootNode = { children: [] };\n    this.stack = [this.rootNode];\n  }\n\n  get top() {\n    return this.stack[this.stack.length - 1];\n  }\n\n  get root() { return this.rootNode; }\n\n  /** @param {Node} node */\n  add(node) {\n    this.top.children.push(node);\n  }\n\n  /** @param {string} kind */\n  openNode(kind) {\n    /** @type Node */\n    const node = { kind, children: [] };\n    this.add(node);\n    this.stack.push(node);\n  }\n\n  closeNode() {\n    if (this.stack.length > 1) {\n      return this.stack.pop();\n    }\n    // eslint-disable-next-line no-undefined\n    return undefined;\n  }\n\n  closeAllNodes() {\n    while (this.closeNode());\n  }\n\n  toJSON() {\n    return JSON.stringify(this.rootNode, null, 4);\n  }\n\n  /**\n   * @typedef { import(\"./html_renderer\").Renderer } Renderer\n   * @param {Renderer} builder\n   */\n  walk(builder) {\n    // this does not\n    return this.constructor._walk(builder, this.rootNode);\n    // this works\n    // return TokenTree._walk(builder, this.rootNode);\n  }\n\n  /**\n   * @param {Renderer} builder\n   * @param {Node} node\n   */\n  static _walk(builder, node) {\n    if (typeof node === \"string\") {\n      builder.addText(node);\n    } else if (node.children) {\n      builder.openNode(node);\n      node.children.forEach((child) => this._walk(builder, child));\n      builder.closeNode(node);\n    }\n    return builder;\n  }\n\n  /**\n   * @param {Node} node\n   */\n  static _collapse(node) {\n    if (typeof node === \"string\") return;\n    if (!node.children) return;\n\n    if (node.children.every(el => typeof el === \"string\")) {\n      // node.text = node.children.join(\"\");\n      // delete node.children;\n      node.children = [node.children.join(\"\")];\n    } else {\n      node.children.forEach((child) => {\n        TokenTree._collapse(child);\n      });\n    }\n  }\n}\n\n/**\n  Currently this is all private API, but this is the minimal API necessary\n  that an Emitter must implement to fully support the parser.\n\n  Minimal interface:\n\n  - addKeyword(text, kind)\n  - addText(text)\n  - addSublanguage(emitter, subLanguageName)\n  - finalize()\n  - openNode(kind)\n  - closeNode()\n  - closeAllNodes()\n  - toHTML()\n\n*/\n\n/**\n * @implements {Emitter}\n */\nclass TokenTreeEmitter extends TokenTree {\n  /**\n   * @param {*} options\n   */\n  constructor(options) {\n    super();\n    this.options = options;\n  }\n\n  /**\n   * @param {string} text\n   * @param {string} kind\n   */\n  addKeyword(text, kind) {\n    if (text === \"\") { return; }\n\n    this.openNode(kind);\n    this.addText(text);\n    this.closeNode();\n  }\n\n  /**\n   * @param {string} text\n   */\n  addText(text) {\n    if (text === \"\") { return; }\n\n    this.add(text);\n  }\n\n  /**\n   * @param {Emitter & {root: DataNode}} emitter\n   * @param {string} name\n   */\n  addSublanguage(emitter, name) {\n    /** @type DataNode */\n    const node = emitter.root;\n    node.kind = name;\n    node.sublanguage = true;\n    this.add(node);\n  }\n\n  toHTML() {\n    const renderer = new HTMLRenderer(this, this.options);\n    return renderer.value();\n  }\n\n  finalize() {\n    return true;\n  }\n}\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\nfunction escape(value) {\n  return new RegExp(value.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), 'm');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/**\n * @param {RegExp} re\n * @returns {number}\n */\nfunction countMatchGroups(re) {\n  return (new RegExp(re.toString() + '|')).exec('').length - 1;\n}\n\n/**\n * Does lexeme start with a regular expression match at the beginning\n * @param {RegExp} re\n * @param {string} lexeme\n */\nfunction startsWith(re, lexeme) {\n  var match = re && re.exec(lexeme);\n  return match && match.index === 0;\n}\n\n// join logically computes regexps.join(separator), but fixes the\n// backreferences so they continue to match.\n// it also places each individual regular expression into it's own\n// match group, keeping track of the sequencing of those match groups\n// is currently an exercise for the caller. :-)\n/**\n * @param {(string | RegExp)[]} regexps\n * @param {string} separator\n * @returns {string}\n */\nfunction join(regexps, separator = \"|\") {\n  // backreferenceRe matches an open parenthesis or backreference. To avoid\n  // an incorrect parse, it additionally matches the following:\n  // - [...] elements, where the meaning of parentheses and escapes change\n  // - other escape sequences, so we do not misparse escape sequences as\n  //   interesting elements\n  // - non-matching or lookahead parentheses, which do not capture. These\n  //   follow the '(' with a '?'.\n  var backreferenceRe = /\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;\n  var numCaptures = 0;\n  var ret = '';\n  for (var i = 0; i < regexps.length; i++) {\n    numCaptures += 1;\n    var offset = numCaptures;\n    var re = source(regexps[i]);\n    if (i > 0) {\n      ret += separator;\n    }\n    ret += \"(\";\n    while (re.length > 0) {\n      var match = backreferenceRe.exec(re);\n      if (match == null) {\n        ret += re;\n        break;\n      }\n      ret += re.substring(0, match.index);\n      re = re.substring(match.index + match[0].length);\n      if (match[0][0] === '\\\\' && match[1]) {\n        // Adjust the backreference.\n        ret += '\\\\' + String(Number(match[1]) + offset);\n      } else {\n        ret += match[0];\n        if (match[0] === '(') {\n          numCaptures++;\n        }\n      }\n    }\n    ret += \")\";\n  }\n  return ret;\n}\n\n// Common regexps\nconst IDENT_RE = '[a-zA-Z]\\\\w*';\nconst UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\nconst NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\nconst C_NUMBER_RE = '(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\nconst BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\nconst RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n/**\n* @param { Partial<Mode> & {binary?: string | RegExp} } opts\n*/\nconst SHEBANG = (opts = {}) => {\n  const beginShebang = /^#![ ]*\\//;\n  if (opts.binary) {\n    opts.begin = concat(\n      beginShebang,\n      /.*\\b/,\n      opts.binary,\n      /\\b.*/);\n  }\n  return inherit({\n    className: 'meta',\n    begin: beginShebang,\n    end: /$/,\n    relevance: 0,\n    /** @type {ModeCallback} */\n    \"on:begin\": (m, resp) => {\n      if (m.index !== 0) resp.ignoreMatch();\n    }\n  }, opts);\n};\n\n// Common modes\nconst BACKSLASH_ESCAPE = {\n  begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n};\nconst APOS_STRING_MODE = {\n  className: 'string',\n  begin: '\\'',\n  end: '\\'',\n  illegal: '\\\\n',\n  contains: [BACKSLASH_ESCAPE]\n};\nconst QUOTE_STRING_MODE = {\n  className: 'string',\n  begin: '\"',\n  end: '\"',\n  illegal: '\\\\n',\n  contains: [BACKSLASH_ESCAPE]\n};\nconst PHRASAL_WORDS_MODE = {\n  begin: /\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/\n};\n/**\n * Creates a comment mode\n *\n * @param {string | RegExp} begin\n * @param {string | RegExp} end\n * @param {Mode | {}} [modeOptions]\n * @returns {Partial<Mode>}\n */\nconst COMMENT = function(begin, end, modeOptions = {}) {\n  var mode = inherit(\n    {\n      className: 'comment',\n      begin,\n      end,\n      contains: []\n    },\n    modeOptions\n  );\n  mode.contains.push(PHRASAL_WORDS_MODE);\n  mode.contains.push({\n    className: 'doctag',\n    begin: '(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):',\n    relevance: 0\n  });\n  return mode;\n};\nconst C_LINE_COMMENT_MODE = COMMENT('//', '$');\nconst C_BLOCK_COMMENT_MODE = COMMENT('/\\\\*', '\\\\*/');\nconst HASH_COMMENT_MODE = COMMENT('#', '$');\nconst NUMBER_MODE = {\n  className: 'number',\n  begin: NUMBER_RE,\n  relevance: 0\n};\nconst C_NUMBER_MODE = {\n  className: 'number',\n  begin: C_NUMBER_RE,\n  relevance: 0\n};\nconst BINARY_NUMBER_MODE = {\n  className: 'number',\n  begin: BINARY_NUMBER_RE,\n  relevance: 0\n};\nconst CSS_NUMBER_MODE = {\n  className: 'number',\n  begin: NUMBER_RE + '(' +\n    '%|em|ex|ch|rem' +\n    '|vw|vh|vmin|vmax' +\n    '|cm|mm|in|pt|pc|px' +\n    '|deg|grad|rad|turn' +\n    '|s|ms' +\n    '|Hz|kHz' +\n    '|dpi|dpcm|dppx' +\n    ')?',\n  relevance: 0\n};\nconst REGEXP_MODE = {\n  // this outer rule makes sure we actually have a WHOLE regex and not simply\n  // an expression such as:\n  //\n  //     3 / something\n  //\n  // (which will then blow up when regex's `illegal` sees the newline)\n  begin: /(?=\\/[^/\\n]*\\/)/,\n  contains: [{\n    className: 'regexp',\n    begin: /\\//,\n    end: /\\/[gimuy]*/,\n    illegal: /\\n/,\n    contains: [\n      BACKSLASH_ESCAPE,\n      {\n        begin: /\\[/,\n        end: /\\]/,\n        relevance: 0,\n        contains: [BACKSLASH_ESCAPE]\n      }\n    ]\n  }]\n};\nconst TITLE_MODE = {\n  className: 'title',\n  begin: IDENT_RE,\n  relevance: 0\n};\nconst UNDERSCORE_TITLE_MODE = {\n  className: 'title',\n  begin: UNDERSCORE_IDENT_RE,\n  relevance: 0\n};\nconst METHOD_GUARD = {\n  // excludes method names from keyword processing\n  begin: '\\\\.\\\\s*' + UNDERSCORE_IDENT_RE,\n  relevance: 0\n};\n\n/**\n * Adds end same as begin mechanics to a mode\n *\n * Your mode must include at least a single () match group as that first match\n * group is what is used for comparison\n * @param {Partial<Mode>} mode\n */\nconst END_SAME_AS_BEGIN = function(mode) {\n  return Object.assign(mode,\n    {\n      /** @type {ModeCallback} */\n      'on:begin': (m, resp) => { resp.data._beginMatch = m[1]; },\n      /** @type {ModeCallback} */\n      'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); }\n    });\n};\n\nvar MODES = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  IDENT_RE: IDENT_RE,\n  UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,\n  NUMBER_RE: NUMBER_RE,\n  C_NUMBER_RE: C_NUMBER_RE,\n  BINARY_NUMBER_RE: BINARY_NUMBER_RE,\n  RE_STARTERS_RE: RE_STARTERS_RE,\n  SHEBANG: SHEBANG,\n  BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,\n  APOS_STRING_MODE: APOS_STRING_MODE,\n  QUOTE_STRING_MODE: QUOTE_STRING_MODE,\n  PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,\n  COMMENT: COMMENT,\n  C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,\n  C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,\n  HASH_COMMENT_MODE: HASH_COMMENT_MODE,\n  NUMBER_MODE: NUMBER_MODE,\n  C_NUMBER_MODE: C_NUMBER_MODE,\n  BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,\n  CSS_NUMBER_MODE: CSS_NUMBER_MODE,\n  REGEXP_MODE: REGEXP_MODE,\n  TITLE_MODE: TITLE_MODE,\n  UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE,\n  METHOD_GUARD: METHOD_GUARD,\n  END_SAME_AS_BEGIN: END_SAME_AS_BEGIN\n});\n\n// keywords that should have no default relevance value\nvar COMMON_KEYWORDS = 'of and for in not or if then'.split(' ');\n\n// compilation\n\n/**\n * Compiles a language definition result\n *\n * Given the raw result of a language definition (Language), compiles this so\n * that it is ready for highlighting code.\n * @param {Language} language\n * @returns {CompiledLanguage}\n */\nfunction compileLanguage(language) {\n  /**\n   * Builds a regex with the case sensativility of the current language\n   *\n   * @param {RegExp | string} value\n   * @param {boolean} [global]\n   */\n  function langRe(value, global) {\n    return new RegExp(\n      source(value),\n      'm' + (language.case_insensitive ? 'i' : '') + (global ? 'g' : '')\n    );\n  }\n\n  /**\n    Stores multiple regular expressions and allows you to quickly search for\n    them all in a string simultaneously - returning the first match.  It does\n    this by creating a huge (a|b|c) regex - each individual item wrapped with ()\n    and joined by `|` - using match groups to track position.  When a match is\n    found checking which position in the array has content allows us to figure\n    out which of the original regexes / match groups triggered the match.\n\n    The match object itself (the result of `Regex.exec`) is returned but also\n    enhanced by merging in any meta-data that was registered with the regex.\n    This is how we keep track of which mode matched, and what type of rule\n    (`illegal`, `begin`, end, etc).\n  */\n  class MultiRegex {\n    constructor() {\n      this.matchIndexes = {};\n      // @ts-ignore\n      this.regexes = [];\n      this.matchAt = 1;\n      this.position = 0;\n    }\n\n    // @ts-ignore\n    addRule(re, opts) {\n      opts.position = this.position++;\n      // @ts-ignore\n      this.matchIndexes[this.matchAt] = opts;\n      this.regexes.push([opts, re]);\n      this.matchAt += countMatchGroups(re) + 1;\n    }\n\n    compile() {\n      if (this.regexes.length === 0) {\n        // avoids the need to check length every time exec is called\n        // @ts-ignore\n        this.exec = () => null;\n      }\n      const terminators = this.regexes.map(el => el[1]);\n      this.matcherRe = langRe(join(terminators), true);\n      this.lastIndex = 0;\n    }\n\n    /** @param {string} s */\n    exec(s) {\n      this.matcherRe.lastIndex = this.lastIndex;\n      const match = this.matcherRe.exec(s);\n      if (!match) { return null; }\n\n      // eslint-disable-next-line no-undefined\n      const i = match.findIndex((el, i) => i > 0 && el !== undefined);\n      // @ts-ignore\n      const matchData = this.matchIndexes[i];\n      // trim off any earlier non-relevant match groups (ie, the other regex\n      // match groups that make up the multi-matcher)\n      match.splice(0, i);\n\n      return Object.assign(match, matchData);\n    }\n  }\n\n  /*\n    Created to solve the key deficiently with MultiRegex - there is no way to\n    test for multiple matches at a single location.  Why would we need to do\n    that?  In the future a more dynamic engine will allow certain matches to be\n    ignored.  An example: if we matched say the 3rd regex in a large group but\n    decided to ignore it - we'd need to started testing again at the 4th\n    regex... but MultiRegex itself gives us no real way to do that.\n\n    So what this class creates MultiRegexs on the fly for whatever search\n    position they are needed.\n\n    NOTE: These additional MultiRegex objects are created dynamically.  For most\n    grammars most of the time we will never actually need anything more than the\n    first MultiRegex - so this shouldn't have too much overhead.\n\n    Say this is our search group, and we match regex3, but wish to ignore it.\n\n      regex1 | regex2 | regex3 | regex4 | regex5    ' ie, startAt = 0\n\n    What we need is a new MultiRegex that only includes the remaining\n    possibilities:\n\n      regex4 | regex5                               ' ie, startAt = 3\n\n    This class wraps all that complexity up in a simple API... `startAt` decides\n    where in the array of expressions to start doing the matching. It\n    auto-increments, so if a match is found at position 2, then startAt will be\n    set to 3.  If the end is reached startAt will return to 0.\n\n    MOST of the time the parser will be setting startAt manually to 0.\n  */\n  class ResumableMultiRegex {\n    constructor() {\n      // @ts-ignore\n      this.rules = [];\n      // @ts-ignore\n      this.multiRegexes = [];\n      this.count = 0;\n\n      this.lastIndex = 0;\n      this.regexIndex = 0;\n    }\n\n    // @ts-ignore\n    getMatcher(index) {\n      if (this.multiRegexes[index]) return this.multiRegexes[index];\n\n      const matcher = new MultiRegex();\n      this.rules.slice(index).forEach(([re, opts]) => matcher.addRule(re, opts));\n      matcher.compile();\n      this.multiRegexes[index] = matcher;\n      return matcher;\n    }\n\n    considerAll() {\n      this.regexIndex = 0;\n    }\n\n    // @ts-ignore\n    addRule(re, opts) {\n      this.rules.push([re, opts]);\n      if (opts.type === \"begin\") this.count++;\n    }\n\n    /** @param {string} s */\n    exec(s) {\n      const m = this.getMatcher(this.regexIndex);\n      m.lastIndex = this.lastIndex;\n      const result = m.exec(s);\n      if (result) {\n        this.regexIndex += result.position + 1;\n        if (this.regexIndex === this.count) { // wrap-around\n          this.regexIndex = 0;\n        }\n      }\n\n      // this.regexIndex = 0;\n      return result;\n    }\n  }\n\n  /**\n   * Given a mode, builds a huge ResumableMultiRegex that can be used to walk\n   * the content and find matches.\n   *\n   * @param {CompiledMode} mode\n   * @returns {ResumableMultiRegex}\n   */\n  function buildModeRegex(mode) {\n    const mm = new ResumableMultiRegex();\n\n    mode.contains.forEach(term => mm.addRule(term.begin, { rule: term, type: \"begin\" }));\n\n    if (mode.terminator_end) {\n      mm.addRule(mode.terminator_end, { type: \"end\" });\n    }\n    if (mode.illegal) {\n      mm.addRule(mode.illegal, { type: \"illegal\" });\n    }\n\n    return mm;\n  }\n\n  // TODO: We need negative look-behind support to do this properly\n  /**\n   * Skip a match if it has a preceding or trailing dot\n   *\n   * This is used for `beginKeywords` to prevent matching expressions such as\n   * `bob.keyword.do()`. The mode compiler automatically wires this up as a\n   * special _internal_ 'on:begin' callback for modes with `beginKeywords`\n   * @param {RegExpMatchArray} match\n   * @param {CallbackResponse} response\n   */\n  function skipIfhasPrecedingOrTrailingDot(match, response) {\n    const before = match.input[match.index - 1];\n    const after = match.input[match.index + match[0].length];\n    if (before === \".\" || after === \".\") {\n      response.ignoreMatch();\n    }\n  }\n\n  /** skip vs abort vs ignore\n   *\n   * @skip   - The mode is still entered and exited normally (and contains rules apply),\n   *           but all content is held and added to the parent buffer rather than being\n   *           output when the mode ends.  Mostly used with `sublanguage` to build up\n   *           a single large buffer than can be parsed by sublanguage.\n   *\n   *             - The mode begin ands ends normally.\n   *             - Content matched is added to the parent mode buffer.\n   *             - The parser cursor is moved forward normally.\n   *\n   * @abort  - A hack placeholder until we have ignore.  Aborts the mode (as if it\n   *           never matched) but DOES NOT continue to match subsequent `contains`\n   *           modes.  Abort is bad/suboptimal because it can result in modes\n   *           farther down not getting applied because an earlier rule eats the\n   *           content but then aborts.\n   *\n   *             - The mode does not begin.\n   *             - Content matched by `begin` is added to the mode buffer.\n   *             - The parser cursor is moved forward accordingly.\n   *\n   * @ignore - Ignores the mode (as if it never matched) and continues to match any\n   *           subsequent `contains` modes.  Ignore isn't technically possible with\n   *           the current parser implementation.\n   *\n   *             - The mode does not begin.\n   *             - Content matched by `begin` is ignored.\n   *             - The parser cursor is not moved forward.\n   */\n\n  /**\n   * Compiles an individual mode\n   *\n   * This can raise an error if the mode contains certain detectable known logic\n   * issues.\n   * @param {Mode} mode\n   * @param {CompiledMode | null} [parent]\n   * @returns {CompiledMode | never}\n   */\n  function compileMode(mode, parent) {\n    const cmode = /** @type CompiledMode */ (mode);\n    if (mode.compiled) return cmode;\n    mode.compiled = true;\n\n    // __beforeBegin is considered private API, internal use only\n    mode.__beforeBegin = null;\n\n    mode.keywords = mode.keywords || mode.beginKeywords;\n\n    let kw_pattern = null;\n    if (typeof mode.keywords === \"object\") {\n      kw_pattern = mode.keywords.$pattern;\n      delete mode.keywords.$pattern;\n    }\n\n    if (mode.keywords) {\n      mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);\n    }\n\n    // both are not allowed\n    if (mode.lexemes && kw_pattern) {\n      throw new Error(\"ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) \");\n    }\n\n    // `mode.lexemes` was the old standard before we added and now recommend\n    // using `keywords.$pattern` to pass the keyword pattern\n    cmode.keywordPatternRe = langRe(mode.lexemes || kw_pattern || /\\w+/, true);\n\n    if (parent) {\n      if (mode.beginKeywords) {\n        // for languages with keywords that include non-word characters checking for\n        // a word boundary is not sufficient, so instead we check for a word boundary\n        // or whitespace - this does no harm in any case since our keyword engine\n        // doesn't allow spaces in keywords anyways and we still check for the boundary\n        // first\n        mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')(?=\\\\b|\\\\s)';\n        mode.__beforeBegin = skipIfhasPrecedingOrTrailingDot;\n      }\n      if (!mode.begin) mode.begin = /\\B|\\b/;\n      cmode.beginRe = langRe(mode.begin);\n      if (mode.endSameAsBegin) mode.end = mode.begin;\n      if (!mode.end && !mode.endsWithParent) mode.end = /\\B|\\b/;\n      if (mode.end) cmode.endRe = langRe(mode.end);\n      cmode.terminator_end = source(mode.end) || '';\n      if (mode.endsWithParent && parent.terminator_end) {\n        cmode.terminator_end += (mode.end ? '|' : '') + parent.terminator_end;\n      }\n    }\n    if (mode.illegal) cmode.illegalRe = langRe(mode.illegal);\n    // eslint-disable-next-line no-undefined\n    if (mode.relevance === undefined) mode.relevance = 1;\n    if (!mode.contains) mode.contains = [];\n\n    mode.contains = [].concat(...mode.contains.map(function(c) {\n      return expand_or_clone_mode(c === 'self' ? mode : c);\n    }));\n    mode.contains.forEach(function(c) { compileMode(/** @type Mode */ (c), cmode); });\n\n    if (mode.starts) {\n      compileMode(mode.starts, parent);\n    }\n\n    cmode.matcher = buildModeRegex(cmode);\n    return cmode;\n  }\n\n  // self is not valid at the top-level\n  if (language.contains && language.contains.includes('self')) {\n    throw new Error(\"ERR: contains `self` is not supported at the top-level of a language.  See documentation.\");\n  }\n  return compileMode(/** @type Mode */ (language));\n}\n\n/**\n * Determines if a mode has a dependency on it's parent or not\n *\n * If a mode does have a parent dependency then often we need to clone it if\n * it's used in multiple places so that each copy points to the correct parent,\n * where-as modes without a parent can often safely be re-used at the bottom of\n * a mode chain.\n *\n * @param {Mode | null} mode\n * @returns {boolean} - is there a dependency on the parent?\n * */\nfunction dependencyOnParent(mode) {\n  if (!mode) return false;\n\n  return mode.endsWithParent || dependencyOnParent(mode.starts);\n}\n\n/**\n * Expands a mode or clones it if necessary\n *\n * This is necessary for modes with parental dependenceis (see notes on\n * `dependencyOnParent`) and for nodes that have `variants` - which must then be\n * exploded into their own individual modes at compile time.\n *\n * @param {Mode} mode\n * @returns {Mode | Mode[]}\n * */\nfunction expand_or_clone_mode(mode) {\n  if (mode.variants && !mode.cached_variants) {\n    mode.cached_variants = mode.variants.map(function(variant) {\n      return inherit(mode, { variants: null }, variant);\n    });\n  }\n\n  // EXPAND\n  // if we have variants then essentially \"replace\" the mode with the variants\n  // this happens in compileMode, where this function is called from\n  if (mode.cached_variants) {\n    return mode.cached_variants;\n  }\n\n  // CLONE\n  // if we have dependencies on parents then we need a unique\n  // instance of ourselves, so we can be reused with many\n  // different parents without issue\n  if (dependencyOnParent(mode)) {\n    return inherit(mode, { starts: mode.starts ? inherit(mode.starts) : null });\n  }\n\n  if (Object.isFrozen(mode)) {\n    return inherit(mode);\n  }\n\n  // no special dependency issues, just return ourselves\n  return mode;\n}\n\n/***********************************************\n  Keywords\n***********************************************/\n\n/**\n * Given raw keywords from a language definition, compile them.\n *\n * @param {string | Record<string,string>} rawKeywords\n * @param {boolean} case_insensitive\n */\nfunction compileKeywords(rawKeywords, case_insensitive) {\n  /** @type KeywordDict */\n  var compiled_keywords = {};\n\n  if (typeof rawKeywords === 'string') { // string\n    splitAndCompile('keyword', rawKeywords);\n  } else {\n    Object.keys(rawKeywords).forEach(function(className) {\n      splitAndCompile(className, rawKeywords[className]);\n    });\n  }\n  return compiled_keywords;\n\n  // ---\n\n  /**\n   * Compiles an individual list of keywords\n   *\n   * Ex: \"for if when while|5\"\n   *\n   * @param {string} className\n   * @param {string} keywordList\n   */\n  function splitAndCompile(className, keywordList) {\n    if (case_insensitive) {\n      keywordList = keywordList.toLowerCase();\n    }\n    keywordList.split(' ').forEach(function(keyword) {\n      var pair = keyword.split('|');\n      compiled_keywords[pair[0]] = [className, scoreForKeyword(pair[0], pair[1])];\n    });\n  }\n}\n\n/**\n * Returns the proper score for a given keyword\n *\n * Also takes into account comment keywords, which will be scored 0 UNLESS\n * another score has been manually assigned.\n * @param {string} keyword\n * @param {string} [providedScore]\n */\nfunction scoreForKeyword(keyword, providedScore) {\n  // manual scores always win over common keywords\n  // so you can force a score of 1 if you really insist\n  if (providedScore) {\n    return Number(providedScore);\n  }\n\n  return commonKeyword(keyword) ? 0 : 1;\n}\n\n/**\n * Determines if a given keyword is common or not\n *\n * @param {string} keyword */\nfunction commonKeyword(keyword) {\n  return COMMON_KEYWORDS.includes(keyword.toLowerCase());\n}\n\nvar version = \"10.1.2\";\n\n/*\nSyntax highlighting with language autodetection.\nhttps://highlightjs.org/\n*/\n\nconst escape$1 = escapeHTML;\nconst inherit$1 = inherit;\n\nconst { nodeStream: nodeStream$1, mergeStreams: mergeStreams$1 } = utils;\nconst NO_MATCH = Symbol(\"nomatch\");\n\n/**\n * @param {any} hljs - object that is extended (legacy)\n * @returns {HLJSApi}\n */\nconst HLJS = function(hljs) {\n  // Convenience variables for build-in objects\n  /** @type {unknown[]} */\n  var ArrayProto = [];\n\n  // Global internal variables used within the highlight.js library.\n  /** @type {Record<string, Language>} */\n  var languages = Object.create(null);\n  /** @type {Record<string, string>} */\n  var aliases = Object.create(null);\n  /** @type {HLJSPlugin[]} */\n  var plugins = [];\n\n  // safe/production mode - swallows more errors, tries to keep running\n  // even if a single syntax or parse hits a fatal error\n  var SAFE_MODE = true;\n  var fixMarkupRe = /(^(<[^>]+>|\\t|)+|\\n)/gm;\n  var LANGUAGE_NOT_FOUND = \"Could not find the language '{}', did you forget to load/include a language module?\";\n  /** @type {Language} */\n  const PLAINTEXT_LANGUAGE = { disableAutodetect: true, name: 'Plain text', contains: [] };\n\n  // Global options used when within external APIs. This is modified when\n  // calling the `hljs.configure` function.\n  /** @type HLJSOptions */\n  var options = {\n    noHighlightRe: /^(no-?highlight)$/i,\n    languageDetectRe: /\\blang(?:uage)?-([\\w-]+)\\b/i,\n    classPrefix: 'hljs-',\n    tabReplace: null,\n    useBR: false,\n    languages: null,\n    // beta configuration options, subject to change, welcome to discuss\n    // https://github.com/highlightjs/highlight.js/issues/1086\n    __emitter: TokenTreeEmitter\n  };\n\n  /* Utility functions */\n\n  /**\n   * Tests a language name to see if highlighting should be skipped\n   * @param {string} languageName\n   */\n  function shouldNotHighlight(languageName) {\n    return options.noHighlightRe.test(languageName);\n  }\n\n  /**\n   * @param {HighlightedHTMLElement} block - the HTML element to determine language for\n   */\n  function blockLanguage(block) {\n    var classes = block.className + ' ';\n\n    classes += block.parentNode ? block.parentNode.className : '';\n\n    // language-* takes precedence over non-prefixed class names.\n    const match = options.languageDetectRe.exec(classes);\n    if (match) {\n      var language = getLanguage(match[1]);\n      if (!language) {\n        console.warn(LANGUAGE_NOT_FOUND.replace(\"{}\", match[1]));\n        console.warn(\"Falling back to no-highlight mode for this block.\", block);\n      }\n      return language ? match[1] : 'no-highlight';\n    }\n\n    return classes\n      .split(/\\s+/)\n      .find((_class) => shouldNotHighlight(_class) || getLanguage(_class));\n  }\n\n  /**\n   * Core highlighting function.\n   *\n   * @param {string} languageName - the language to use for highlighting\n   * @param {string} code - the code to highlight\n   * @param {boolean} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n   * @param {Mode} [continuation] - current continuation mode, if any\n   *\n   * @returns {HighlightResult} Result - an object that represents the result\n   * @property {string} language - the language name\n   * @property {number} relevance - the relevance score\n   * @property {string} value - the highlighted HTML code\n   * @property {string} code - the original raw code\n   * @property {Mode} top - top of the current mode stack\n   * @property {boolean} illegal - indicates whether any illegal matches were found\n  */\n  function highlight(languageName, code, ignoreIllegals, continuation) {\n    /** @type {{ code: string, language: string, result?: any }} */\n    var context = {\n      code,\n      language: languageName\n    };\n    // the plugin can change the desired language or the code to be highlighted\n    // just be changing the object it was passed\n    fire(\"before:highlight\", context);\n\n    // a before plugin can usurp the result completely by providing it's own\n    // in which case we don't even need to call highlight\n    var result = context.result ?\n      context.result :\n      _highlight(context.language, context.code, ignoreIllegals, continuation);\n\n    result.code = context.code;\n    // the plugin can change anything in result to suite it\n    fire(\"after:highlight\", result);\n\n    return result;\n  }\n\n  /**\n   * private highlight that's used internally and does not fire callbacks\n   *\n   * @param {string} languageName - the language to use for highlighting\n   * @param {string} code - the code to highlight\n   * @param {boolean} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n   * @param {Mode} [continuation] - current continuation mode, if any\n  */\n  function _highlight(languageName, code, ignoreIllegals, continuation) {\n    var codeToHighlight = code;\n\n    /**\n     * Return keyword data if a match is a keyword\n     * @param {CompiledMode} mode - current mode\n     * @param {RegExpMatchArray} match - regexp match data\n     * @returns {KeywordData | false}\n     */\n    function keywordData(mode, match) {\n      var matchText = language.case_insensitive ? match[0].toLowerCase() : match[0];\n      return Object.prototype.hasOwnProperty.call(mode.keywords, matchText) && mode.keywords[matchText];\n    }\n\n    function processKeywords() {\n      if (!top.keywords) {\n        emitter.addText(mode_buffer);\n        return;\n      }\n\n      let last_index = 0;\n      top.keywordPatternRe.lastIndex = 0;\n      let match = top.keywordPatternRe.exec(mode_buffer);\n      let buf = \"\";\n\n      while (match) {\n        buf += mode_buffer.substring(last_index, match.index);\n        const data = keywordData(top, match);\n        if (data) {\n          const [kind, keywordRelevance] = data;\n          emitter.addText(buf);\n          buf = \"\";\n\n          relevance += keywordRelevance;\n          emitter.addKeyword(match[0], kind);\n        } else {\n          buf += match[0];\n        }\n        last_index = top.keywordPatternRe.lastIndex;\n        match = top.keywordPatternRe.exec(mode_buffer);\n      }\n      buf += mode_buffer.substr(last_index);\n      emitter.addText(buf);\n    }\n\n    function processSubLanguage() {\n      if (mode_buffer === \"\") return;\n      /** @type HighlightResult */\n      var result = null;\n\n      if (typeof top.subLanguage === 'string') {\n        if (!languages[top.subLanguage]) {\n          emitter.addText(mode_buffer);\n          return;\n        }\n        result = _highlight(top.subLanguage, mode_buffer, true, continuations[top.subLanguage]);\n        continuations[top.subLanguage] = result.top;\n      } else {\n        result = highlightAuto(mode_buffer, top.subLanguage.length ? top.subLanguage : null);\n      }\n\n      // Counting embedded language score towards the host language may be disabled\n      // with zeroing the containing mode relevance. Use case in point is Markdown that\n      // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n      // score.\n      if (top.relevance > 0) {\n        relevance += result.relevance;\n      }\n      emitter.addSublanguage(result.emitter, result.language);\n    }\n\n    function processBuffer() {\n      if (top.subLanguage != null) {\n        processSubLanguage();\n      } else {\n        processKeywords();\n      }\n      mode_buffer = '';\n    }\n\n    /**\n     * @param {Mode} mode - new mode to start\n     */\n    function startNewMode(mode) {\n      if (mode.className) {\n        emitter.openNode(mode.className);\n      }\n      top = Object.create(mode, { parent: { value: top } });\n      return top;\n    }\n\n    /**\n     * @param {CompiledMode } mode - the mode to potentially end\n     * @param {RegExpMatchArray} match - the latest match\n     * @param {string} matchPlusRemainder - match plus remainder of content\n     * @returns {CompiledMode | void} - the next mode, or if void continue on in current mode\n     */\n    function endOfMode(mode, match, matchPlusRemainder) {\n      let matched = startsWith(mode.endRe, matchPlusRemainder);\n\n      if (matched) {\n        if (mode[\"on:end\"]) {\n          const resp = new Response(mode);\n          mode[\"on:end\"](match, resp);\n          if (resp.ignore) matched = false;\n        }\n\n        if (matched) {\n          while (mode.endsParent && mode.parent) {\n            mode = mode.parent;\n          }\n          return mode;\n        }\n      }\n      // even if on:end fires an `ignore` it's still possible\n      // that we might trigger the end node because of a parent mode\n      if (mode.endsWithParent) {\n        return endOfMode(mode.parent, match, matchPlusRemainder);\n      }\n    }\n\n    /**\n     * Handle matching but then ignoring a sequence of text\n     *\n     * @param {string} lexeme - string containing full match text\n     */\n    function doIgnore(lexeme) {\n      if (top.matcher.regexIndex === 0) {\n        // no more regexs to potentially match here, so we move the cursor forward one\n        // space\n        mode_buffer += lexeme[0];\n        return 1;\n      } else {\n        // no need to move the cursor, we still have additional regexes to try and\n        // match at this very spot\n        continueScanAtSamePosition = true;\n        return 0;\n      }\n    }\n\n    /**\n     * Handle the start of a new potential mode match\n     *\n     * @param {EnhancedMatch} match - the current match\n     * @returns {number} how far to advance the parse cursor\n     */\n    function doBeginMatch(match) {\n      var lexeme = match[0];\n      var new_mode = match.rule;\n\n      const resp = new Response(new_mode);\n      // first internal before callbacks, then the public ones\n      const beforeCallbacks = [new_mode.__beforeBegin, new_mode[\"on:begin\"]];\n      for (const cb of beforeCallbacks) {\n        if (!cb) continue;\n        cb(match, resp);\n        if (resp.ignore) return doIgnore(lexeme);\n      }\n\n      if (new_mode && new_mode.endSameAsBegin) {\n        new_mode.endRe = escape(lexeme);\n      }\n\n      if (new_mode.skip) {\n        mode_buffer += lexeme;\n      } else {\n        if (new_mode.excludeBegin) {\n          mode_buffer += lexeme;\n        }\n        processBuffer();\n        if (!new_mode.returnBegin && !new_mode.excludeBegin) {\n          mode_buffer = lexeme;\n        }\n      }\n      startNewMode(new_mode);\n      // if (mode[\"after:begin\"]) {\n      //   let resp = new Response(mode);\n      //   mode[\"after:begin\"](match, resp);\n      // }\n      return new_mode.returnBegin ? 0 : lexeme.length;\n    }\n\n    /**\n     * Handle the potential end of mode\n     *\n     * @param {RegExpMatchArray} match - the current match\n     */\n    function doEndMatch(match) {\n      var lexeme = match[0];\n      var matchPlusRemainder = codeToHighlight.substr(match.index);\n\n      var end_mode = endOfMode(top, match, matchPlusRemainder);\n      if (!end_mode) { return NO_MATCH; }\n\n      var origin = top;\n      if (origin.skip) {\n        mode_buffer += lexeme;\n      } else {\n        if (!(origin.returnEnd || origin.excludeEnd)) {\n          mode_buffer += lexeme;\n        }\n        processBuffer();\n        if (origin.excludeEnd) {\n          mode_buffer = lexeme;\n        }\n      }\n      do {\n        if (top.className) {\n          emitter.closeNode();\n        }\n        if (!top.skip && !top.subLanguage) {\n          relevance += top.relevance;\n        }\n        top = top.parent;\n      } while (top !== end_mode.parent);\n      if (end_mode.starts) {\n        if (end_mode.endSameAsBegin) {\n          end_mode.starts.endRe = end_mode.endRe;\n        }\n        startNewMode(end_mode.starts);\n      }\n      return origin.returnEnd ? 0 : lexeme.length;\n    }\n\n    function processContinuations() {\n      var list = [];\n      for (var current = top; current !== language; current = current.parent) {\n        if (current.className) {\n          list.unshift(current.className);\n        }\n      }\n      list.forEach(item => emitter.openNode(item));\n    }\n\n    /** @type {{type?: MatchType, index?: number, rule?: Mode}}} */\n    var lastMatch = {};\n\n    /**\n     *  Process an individual match\n     *\n     * @param {string} textBeforeMatch - text preceeding the match (since the last match)\n     * @param {EnhancedMatch} [match] - the match itself\n     */\n    function processLexeme(textBeforeMatch, match) {\n      var lexeme = match && match[0];\n\n      // add non-matched text to the current mode buffer\n      mode_buffer += textBeforeMatch;\n\n      if (lexeme == null) {\n        processBuffer();\n        return 0;\n      }\n\n      // we've found a 0 width match and we're stuck, so we need to advance\n      // this happens when we have badly behaved rules that have optional matchers to the degree that\n      // sometimes they can end up matching nothing at all\n      // Ref: https://github.com/highlightjs/highlight.js/issues/2140\n      if (lastMatch.type === \"begin\" && match.type === \"end\" && lastMatch.index === match.index && lexeme === \"\") {\n        // spit the \"skipped\" character that our regex choked on back into the output sequence\n        mode_buffer += codeToHighlight.slice(match.index, match.index + 1);\n        if (!SAFE_MODE) {\n          /** @type {AnnotatedError} */\n          const err = new Error('0 width match regex');\n          err.languageName = languageName;\n          err.badRule = lastMatch.rule;\n          throw err;\n        }\n        return 1;\n      }\n      lastMatch = match;\n\n      if (match.type === \"begin\") {\n        return doBeginMatch(match);\n      } else if (match.type === \"illegal\" && !ignoreIllegals) {\n        // illegal match, we do not continue processing\n        /** @type {AnnotatedError} */\n        const err = new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.className || '<unnamed>') + '\"');\n        err.mode = top;\n        throw err;\n      } else if (match.type === \"end\") {\n        var processed = doEndMatch(match);\n        if (processed !== NO_MATCH) {\n          return processed;\n        }\n      }\n\n      // edge case for when illegal matches $ (end of line) which is technically\n      // a 0 width match but not a begin/end match so it's not caught by the\n      // first handler (when ignoreIllegals is true)\n      if (match.type === \"illegal\" && lexeme === \"\") {\n        // advance so we aren't stuck in an infinite loop\n        return 1;\n      }\n\n      // infinite loops are BAD, this is a last ditch catch all. if we have a\n      // decent number of iterations yet our index (cursor position in our\n      // parsing) still 3x behind our index then something is very wrong\n      // so we bail\n      if (iterations > 100000 && iterations > match.index * 3) {\n        const err = new Error('potential infinite loop, way more iterations than matches');\n        throw err;\n      }\n\n      /*\n      Why might be find ourselves here?  Only one occasion now.  An end match that was\n      triggered but could not be completed.  When might this happen?  When an `endSameasBegin`\n      rule sets the end rule to a specific match.  Since the overall mode termination rule that's\n      being used to scan the text isn't recompiled that means that any match that LOOKS like\n      the end (but is not, because it is not an exact match to the beginning) will\n      end up here.  A definite end match, but when `doEndMatch` tries to \"reapply\"\n      the end rule and fails to match, we wind up here, and just silently ignore the end.\n\n      This causes no real harm other than stopping a few times too many.\n      */\n\n      mode_buffer += lexeme;\n      return lexeme.length;\n    }\n\n    var language = getLanguage(languageName);\n    if (!language) {\n      console.error(LANGUAGE_NOT_FOUND.replace(\"{}\", languageName));\n      throw new Error('Unknown language: \"' + languageName + '\"');\n    }\n\n    var md = compileLanguage(language);\n    var result = '';\n    /** @type {CompiledMode} */\n    var top = continuation || md;\n    /** @type Record<string,Mode> */\n    var continuations = {}; // keep continuations for sub-languages\n    var emitter = new options.__emitter(options);\n    processContinuations();\n    var mode_buffer = '';\n    var relevance = 0;\n    var index = 0;\n    var iterations = 0;\n    var continueScanAtSamePosition = false;\n\n    try {\n      top.matcher.considerAll();\n\n      for (;;) {\n        iterations++;\n        if (continueScanAtSamePosition) {\n          // only regexes not matched previously will now be\n          // considered for a potential match\n          continueScanAtSamePosition = false;\n        } else {\n          top.matcher.lastIndex = index;\n          top.matcher.considerAll();\n        }\n        const match = top.matcher.exec(codeToHighlight);\n        // console.log(\"match\", match[0], match.rule && match.rule.begin)\n        if (!match) break;\n\n        const beforeMatch = codeToHighlight.substring(index, match.index);\n        const processedCount = processLexeme(beforeMatch, match);\n        index = match.index + processedCount;\n      }\n      processLexeme(codeToHighlight.substr(index));\n      emitter.closeAllNodes();\n      emitter.finalize();\n      result = emitter.toHTML();\n\n      return {\n        relevance: relevance,\n        value: result,\n        language: languageName,\n        illegal: false,\n        emitter: emitter,\n        top: top\n      };\n    } catch (err) {\n      if (err.message && err.message.includes('Illegal')) {\n        return {\n          illegal: true,\n          illegalBy: {\n            msg: err.message,\n            context: codeToHighlight.slice(index - 100, index + 100),\n            mode: err.mode\n          },\n          sofar: result,\n          relevance: 0,\n          value: escape$1(codeToHighlight),\n          emitter: emitter\n        };\n      } else if (SAFE_MODE) {\n        return {\n          illegal: false,\n          relevance: 0,\n          value: escape$1(codeToHighlight),\n          emitter: emitter,\n          language: languageName,\n          top: top,\n          errorRaised: err\n        };\n      } else {\n        throw err;\n      }\n    }\n  }\n\n  /**\n   * returns a valid highlight result, without actually doing any actual work,\n   * auto highlight starts with this and it's possible for small snippets that\n   * auto-detection may not find a better match\n   * @param {string} code\n   * @returns {HighlightResult}\n   */\n  function justTextHighlightResult(code) {\n    const result = {\n      relevance: 0,\n      emitter: new options.__emitter(options),\n      value: escape$1(code),\n      illegal: false,\n      top: PLAINTEXT_LANGUAGE\n    };\n    result.emitter.addText(code);\n    return result;\n  }\n\n  /**\n  Highlighting with language detection. Accepts a string with the code to\n  highlight. Returns an object with the following properties:\n\n  - language (detected language)\n  - relevance (int)\n  - value (an HTML string with highlighting markup)\n  - second_best (object with the same structure for second-best heuristically\n    detected language, may be absent)\n\n    @param {string} code\n    @param {Array<string>} [languageSubset]\n    @returns {AutoHighlightResult}\n  */\n  function highlightAuto(code, languageSubset) {\n    languageSubset = languageSubset || options.languages || Object.keys(languages);\n    var result = justTextHighlightResult(code);\n    var secondBest = result;\n    languageSubset.filter(getLanguage).filter(autoDetection).forEach(function(name) {\n      var current = _highlight(name, code, false);\n      current.language = name;\n      if (current.relevance > secondBest.relevance) {\n        secondBest = current;\n      }\n      if (current.relevance > result.relevance) {\n        secondBest = result;\n        result = current;\n      }\n    });\n    if (secondBest.language) {\n      // second_best (with underscore) is the expected API\n      result.second_best = secondBest;\n    }\n    return result;\n  }\n\n  /**\n  Post-processing of the highlighted markup:\n\n  - replace TABs with something more useful\n  - replace real line-breaks with '<br>' for non-pre containers\n\n    @param {string} html\n    @returns {string}\n  */\n  function fixMarkup(html) {\n    if (!(options.tabReplace || options.useBR)) {\n      return html;\n    }\n\n    return html.replace(fixMarkupRe, match => {\n      if (match === '\\n') {\n        return options.useBR ? '<br>' : match;\n      } else if (options.tabReplace) {\n        return match.replace(/\\t/g, options.tabReplace);\n      }\n      return match;\n    });\n  }\n\n  /**\n   * Builds new class name for block given the language name\n   *\n   * @param {string} prevClassName\n   * @param {string} [currentLang]\n   * @param {string} [resultLang]\n   */\n  function buildClassName(prevClassName, currentLang, resultLang) {\n    var language = currentLang ? aliases[currentLang] : resultLang;\n    var result = [prevClassName.trim()];\n\n    if (!prevClassName.match(/\\bhljs\\b/)) {\n      result.push('hljs');\n    }\n\n    if (!prevClassName.includes(language)) {\n      result.push(language);\n    }\n\n    return result.join(' ').trim();\n  }\n\n  /**\n   * Applies highlighting to a DOM node containing code. Accepts a DOM node and\n   * two optional parameters for fixMarkup.\n   *\n   * @param {HighlightedHTMLElement} element - the HTML element to highlight\n  */\n  function highlightBlock(element) {\n    /** @type HTMLElement */\n    let node = null;\n    const language = blockLanguage(element);\n\n    if (shouldNotHighlight(language)) return;\n\n    fire(\"before:highlightBlock\",\n      { block: element, language: language });\n\n    if (options.useBR) {\n      node = document.createElement('div');\n      node.innerHTML = element.innerHTML.replace(/\\n/g, '').replace(/<br[ /]*>/g, '\\n');\n    } else {\n      node = element;\n    }\n    const text = node.textContent;\n    const result = language ? highlight(language, text, true) : highlightAuto(text);\n\n    const originalStream = nodeStream$1(node);\n    if (originalStream.length) {\n      const resultNode = document.createElement('div');\n      resultNode.innerHTML = result.value;\n      result.value = mergeStreams$1(originalStream, nodeStream$1(resultNode), text);\n    }\n    result.value = fixMarkup(result.value);\n\n    fire(\"after:highlightBlock\", { block: element, result: result });\n\n    element.innerHTML = result.value;\n    element.className = buildClassName(element.className, language, result.language);\n    element.result = {\n      language: result.language,\n      // TODO: remove with version 11.0\n      re: result.relevance,\n      relavance: result.relevance\n    };\n    if (result.second_best) {\n      element.second_best = {\n        language: result.second_best.language,\n        // TODO: remove with version 11.0\n        re: result.second_best.relevance,\n        relavance: result.second_best.relevance\n      };\n    }\n  }\n\n  /**\n   * Updates highlight.js global options with the passed options\n   *\n   * @param {{}} userOptions\n   */\n  function configure(userOptions) {\n    options = inherit$1(options, userOptions);\n  }\n\n  /**\n   * Highlights to all <pre><code> blocks on a page\n   *\n   * @type {Function & {called?: boolean}}\n   */\n  const initHighlighting = () => {\n    if (initHighlighting.called) return;\n    initHighlighting.called = true;\n\n    var blocks = document.querySelectorAll('pre code');\n    ArrayProto.forEach.call(blocks, highlightBlock);\n  };\n\n  // Higlights all when DOMContentLoaded fires\n  function initHighlightingOnLoad() {\n    // @ts-ignore\n    window.addEventListener('DOMContentLoaded', initHighlighting, false);\n  }\n\n  /**\n   * Register a language grammar module\n   *\n   * @param {string} languageName\n   * @param {LanguageFn} languageDefinition\n   */\n  function registerLanguage(languageName, languageDefinition) {\n    var lang = null;\n    try {\n      lang = languageDefinition(hljs);\n    } catch (error) {\n      console.error(\"Language definition for '{}' could not be registered.\".replace(\"{}\", languageName));\n      // hard or soft error\n      if (!SAFE_MODE) { throw error; } else { console.error(error); }\n      // languages that have serious errors are replaced with essentially a\n      // \"plaintext\" stand-in so that the code blocks will still get normal\n      // css classes applied to them - and one bad language won't break the\n      // entire highlighter\n      lang = PLAINTEXT_LANGUAGE;\n    }\n    // give it a temporary name if it doesn't have one in the meta-data\n    if (!lang.name) lang.name = languageName;\n    languages[languageName] = lang;\n    lang.rawDefinition = languageDefinition.bind(null, hljs);\n\n    if (lang.aliases) {\n      registerAliases(lang.aliases, { languageName });\n    }\n  }\n\n  /**\n   * @returns {string[]} List of language internal names\n   */\n  function listLanguages() {\n    return Object.keys(languages);\n  }\n\n  /**\n    intended usage: When one language truly requires another\n\n    Unlike `getLanguage`, this will throw when the requested language\n    is not available.\n\n    @param {string} name - name of the language to fetch/require\n    @returns {Language | never}\n  */\n  function requireLanguage(name) {\n    var lang = getLanguage(name);\n    if (lang) { return lang; }\n\n    var err = new Error('The \\'{}\\' language is required, but not loaded.'.replace('{}', name));\n    throw err;\n  }\n\n  /**\n   * @param {string} name - name of the language to retrieve\n   * @returns {Language | undefined}\n   */\n  function getLanguage(name) {\n    name = (name || '').toLowerCase();\n    return languages[name] || languages[aliases[name]];\n  }\n\n  /**\n   *\n   * @param {string|string[]} aliasList - single alias or list of aliases\n   * @param {{languageName: string}} opts\n   */\n  function registerAliases(aliasList, { languageName }) {\n    if (typeof aliasList === 'string') {\n      aliasList = [aliasList];\n    }\n    aliasList.forEach(alias => { aliases[alias] = languageName; });\n  }\n\n  /**\n   * Determines if a given language has auto-detection enabled\n   * @param {string} name - name of the language\n   */\n  function autoDetection(name) {\n    var lang = getLanguage(name);\n    return lang && !lang.disableAutodetect;\n  }\n\n  /**\n   * @param {HLJSPlugin} plugin\n   */\n  function addPlugin(plugin) {\n    plugins.push(plugin);\n  }\n\n  /**\n   *\n   * @param {PluginEvent} event\n   * @param {any} args\n   */\n  function fire(event, args) {\n    var cb = event;\n    plugins.forEach(function(plugin) {\n      if (plugin[cb]) {\n        plugin[cb](args);\n      }\n    });\n  }\n\n  /* Interface definition */\n\n  Object.assign(hljs, {\n    highlight,\n    highlightAuto,\n    fixMarkup,\n    highlightBlock,\n    configure,\n    initHighlighting,\n    initHighlightingOnLoad,\n    registerLanguage,\n    listLanguages,\n    getLanguage,\n    registerAliases,\n    requireLanguage,\n    autoDetection,\n    inherit: inherit$1,\n    addPlugin\n  });\n\n  hljs.debugMode = function() { SAFE_MODE = false; };\n  hljs.safeMode = function() { SAFE_MODE = true; };\n  hljs.versionString = version;\n\n  for (const key in MODES) {\n    // @ts-ignore\n    if (typeof MODES[key] === \"object\") {\n      // @ts-ignore\n      deepFreeze(MODES[key]);\n    }\n  }\n\n  // merge all the modes/regexs into our main object\n  Object.assign(hljs, MODES);\n\n  return hljs;\n};\n\n// export an \"instance\" of the highlighter\nvar highlight = HLJS({});\n\nmodule.exports = highlight;\n","'use strict'\n\nvar formatter = require('format')\n\nvar fault = create(Error)\n\nmodule.exports = fault\n\nfault.eval = create(EvalError)\nfault.range = create(RangeError)\nfault.reference = create(ReferenceError)\nfault.syntax = create(SyntaxError)\nfault.type = create(TypeError)\nfault.uri = create(URIError)\n\nfault.create = create\n\n// Create a new `EConstructor`, with the formatted `format` as a first argument.\nfunction create(EConstructor) {\n  FormattedError.displayName = EConstructor.displayName || EConstructor.name\n\n  return FormattedError\n\n  function FormattedError(format) {\n    if (format) {\n      format = formatter.apply(null, arguments)\n    }\n\n    return new EConstructor(format)\n  }\n}\n","//\n// format - printf-like string formatting for JavaScript\n// github.com/samsonjs/format\n// @_sjs\n//\n// Copyright 2010 - 2013 Sami Samhuri <sami@samhuri.net>\n//\n// MIT License\n// http://sjs.mit-license.org\n//\n\n;(function() {\n\n  //// Export the API\n  var namespace;\n\n  // CommonJS / Node module\n  if (typeof module !== 'undefined') {\n    namespace = module.exports = format;\n  }\n\n  // Browsers and other environments\n  else {\n    // Get the global object. Works in ES3, ES5, and ES5 strict mode.\n    namespace = (function(){ return this || (1,eval)('this') }());\n  }\n\n  namespace.format = format;\n  namespace.vsprintf = vsprintf;\n\n  if (typeof console !== 'undefined' && typeof console.log === 'function') {\n    namespace.printf = printf;\n  }\n\n  function printf(/* ... */) {\n    console.log(format.apply(null, arguments));\n  }\n\n  function vsprintf(fmt, replacements) {\n    return format.apply(null, [fmt].concat(replacements));\n  }\n\n  function format(fmt) {\n    var argIndex = 1 // skip initial format argument\n      , args = [].slice.call(arguments)\n      , i = 0\n      , n = fmt.length\n      , result = ''\n      , c\n      , escaped = false\n      , arg\n      , tmp\n      , leadingZero = false\n      , precision\n      , nextArg = function() { return args[argIndex++]; }\n      , slurpNumber = function() {\n          var digits = '';\n          while (/\\d/.test(fmt[i])) {\n            digits += fmt[i++];\n            c = fmt[i];\n          }\n          return digits.length > 0 ? parseInt(digits) : null;\n        }\n      ;\n    for (; i < n; ++i) {\n      c = fmt[i];\n      if (escaped) {\n        escaped = false;\n        if (c == '.') {\n          leadingZero = false;\n          c = fmt[++i];\n        }\n        else if (c == '0' && fmt[i + 1] == '.') {\n          leadingZero = true;\n          i += 2;\n          c = fmt[i];\n        }\n        else {\n          leadingZero = true;\n        }\n        precision = slurpNumber();\n        switch (c) {\n        case 'b': // number in binary\n          result += parseInt(nextArg(), 10).toString(2);\n          break;\n        case 'c': // character\n          arg = nextArg();\n          if (typeof arg === 'string' || arg instanceof String)\n            result += arg;\n          else\n            result += String.fromCharCode(parseInt(arg, 10));\n          break;\n        case 'd': // number in decimal\n          result += parseInt(nextArg(), 10);\n          break;\n        case 'f': // floating point number\n          tmp = String(parseFloat(nextArg()).toFixed(precision || 6));\n          result += leadingZero ? tmp : tmp.replace(/^0/, '');\n          break;\n        case 'j': // JSON\n          result += JSON.stringify(nextArg());\n          break;\n        case 'o': // number in octal\n          result += '0' + parseInt(nextArg(), 10).toString(8);\n          break;\n        case 's': // string\n          result += nextArg();\n          break;\n        case 'x': // lowercase hexadecimal\n          result += '0x' + parseInt(nextArg(), 10).toString(16);\n          break;\n        case 'X': // uppercase hexadecimal\n          result += '0x' + parseInt(nextArg(), 10).toString(16).toUpperCase();\n          break;\n        default:\n          result += c;\n          break;\n        }\n      } else if (c === '%') {\n        escaped = true;\n      } else {\n        result += c;\n      }\n    }\n    return result;\n  }\n\n}());\n","// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = parts.length - 1; i >= 0; i--) {\n    var last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n  var resolvedPath = '',\n      resolvedAbsolute = false;\n\n  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    var path = (i >= 0) ? arguments[i] : process.cwd();\n\n    // Skip empty and invalid entries\n    if (typeof path !== 'string') {\n      throw new TypeError('Arguments to path.resolve must be strings');\n    } else if (!path) {\n      continue;\n    }\n\n    resolvedPath = path + '/' + resolvedPath;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n    return !!p;\n  }), !resolvedAbsolute).join('/');\n\n  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n  var isAbsolute = exports.isAbsolute(path),\n      trailingSlash = substr(path, -1) === '/';\n\n  // Normalize the path\n  path = normalizeArray(filter(path.split('/'), function(p) {\n    return !!p;\n  }), !isAbsolute).join('/');\n\n  if (!path && !isAbsolute) {\n    path = '.';\n  }\n  if (path && trailingSlash) {\n    path += '/';\n  }\n\n  return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n  return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n  var paths = Array.prototype.slice.call(arguments, 0);\n  return exports.normalize(filter(paths, function(p, index) {\n    if (typeof p !== 'string') {\n      throw new TypeError('Arguments to path.join must be strings');\n    }\n    return p;\n  }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n  from = exports.resolve(from).substr(1);\n  to = exports.resolve(to).substr(1);\n\n  function trim(arr) {\n    var start = 0;\n    for (; start < arr.length; start++) {\n      if (arr[start] !== '') break;\n    }\n\n    var end = arr.length - 1;\n    for (; end >= 0; end--) {\n      if (arr[end] !== '') break;\n    }\n\n    if (start > end) return [];\n    return arr.slice(start, end - start + 1);\n  }\n\n  var fromParts = trim(from.split('/'));\n  var toParts = trim(to.split('/'));\n\n  var length = Math.min(fromParts.length, toParts.length);\n  var samePartsLength = length;\n  for (var i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  var outputParts = [];\n  for (var i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n  if (typeof path !== 'string') path = path + '';\n  if (path.length === 0) return '.';\n  var code = path.charCodeAt(0);\n  var hasRoot = code === 47 /*/*/;\n  var end = -1;\n  var matchedSlash = true;\n  for (var i = path.length - 1; i >= 1; --i) {\n    code = path.charCodeAt(i);\n    if (code === 47 /*/*/) {\n        if (!matchedSlash) {\n          end = i;\n          break;\n        }\n      } else {\n      // We saw the first non-path separator\n      matchedSlash = false;\n    }\n  }\n\n  if (end === -1) return hasRoot ? '/' : '.';\n  if (hasRoot && end === 1) {\n    // return '//';\n    // Backwards-compat fix:\n    return '/';\n  }\n  return path.slice(0, end);\n};\n\nfunction basename(path) {\n  if (typeof path !== 'string') path = path + '';\n\n  var start = 0;\n  var end = -1;\n  var matchedSlash = true;\n  var i;\n\n  for (i = path.length - 1; i >= 0; --i) {\n    if (path.charCodeAt(i) === 47 /*/*/) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now\n        if (!matchedSlash) {\n          start = i + 1;\n          break;\n        }\n      } else if (end === -1) {\n      // We saw the first non-path separator, mark this as the end of our\n      // path component\n      matchedSlash = false;\n      end = i + 1;\n    }\n  }\n\n  if (end === -1) return '';\n  return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n  var f = basename(path);\n  if (ext && f.substr(-1 * ext.length) === ext) {\n    f = f.substr(0, f.length - ext.length);\n  }\n  return f;\n};\n\nexports.extname = function (path) {\n  if (typeof path !== 'string') path = path + '';\n  var startDot = -1;\n  var startPart = 0;\n  var end = -1;\n  var matchedSlash = true;\n  // Track the state of characters (if any) we see before our first dot and\n  // after any path separator we find\n  var preDotState = 0;\n  for (var i = path.length - 1; i >= 0; --i) {\n    var code = path.charCodeAt(i);\n    if (code === 47 /*/*/) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now\n        if (!matchedSlash) {\n          startPart = i + 1;\n          break;\n        }\n        continue;\n      }\n    if (end === -1) {\n      // We saw the first non-path separator, mark this as the end of our\n      // extension\n      matchedSlash = false;\n      end = i + 1;\n    }\n    if (code === 46 /*.*/) {\n        // If this is our first dot, mark it as the start of our extension\n        if (startDot === -1)\n          startDot = i;\n        else if (preDotState !== 1)\n          preDotState = 1;\n    } else if (startDot !== -1) {\n      // We saw a non-dot and non-path separator before our dot, so we should\n      // have a good chance at having a non-empty extension\n      preDotState = -1;\n    }\n  }\n\n  if (startDot === -1 || end === -1 ||\n      // We saw a non-dot character immediately before the dot\n      preDotState === 0 ||\n      // The (right-most) trimmed path component is exactly '..'\n      preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n    return '';\n  }\n  return path.slice(startDot, end);\n};\n\nfunction filter (xs, f) {\n    if (xs.filter) return xs.filter(f);\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        if (f(xs[i], i, xs)) res.push(xs[i]);\n    }\n    return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n    ? function (str, start, len) { return str.substr(start, len) }\n    : function (str, start, len) {\n        if (start < 0) start = str.length + start;\n        return str.substr(start, len);\n    }\n;\n","// Main parser class\n\n'use strict';\n\n\nvar utils        = require('./common/utils');\nvar helpers      = require('./helpers');\nvar Renderer     = require('./renderer');\nvar ParserCore   = require('./parser_core');\nvar ParserBlock  = require('./parser_block');\nvar ParserInline = require('./parser_inline');\nvar LinkifyIt    = require('linkify-it');\nvar mdurl        = require('mdurl');\nvar punycode     = require('punycode');\n\n\nvar config = {\n  'default': require('./presets/default'),\n  zero: require('./presets/zero'),\n  commonmark: require('./presets/commonmark')\n};\n\n////////////////////////////////////////////////////////////////////////////////\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nvar BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nvar GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\n\nfunction validateLink(url) {\n  // url should be normalized at this point, and existing entities are decoded\n  var str = url.trim().toLowerCase();\n\n  return BAD_PROTO_RE.test(str) ? (GOOD_DATA_RE.test(str) ? true : false) : true;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar RECODE_HOSTNAME_FOR = [ 'http:', 'https:', 'mailto:' ];\n\nfunction normalizeLink(url) {\n  var parsed = mdurl.parse(url, true);\n\n  if (parsed.hostname) {\n    // Encode hostnames in urls like:\n    // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n    //\n    // We don't encode unknown schemas, because it's likely that we encode\n    // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n    //\n    if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n      try {\n        parsed.hostname = punycode.toASCII(parsed.hostname);\n      } catch (er) { /**/ }\n    }\n  }\n\n  return mdurl.encode(mdurl.format(parsed));\n}\n\nfunction normalizeLinkText(url) {\n  var parsed = mdurl.parse(url, true);\n\n  if (parsed.hostname) {\n    // Encode hostnames in urls like:\n    // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n    //\n    // We don't encode unknown schemas, because it's likely that we encode\n    // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n    //\n    if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n      try {\n        parsed.hostname = punycode.toUnicode(parsed.hostname);\n      } catch (er) { /**/ }\n    }\n  }\n\n  return mdurl.decode(mdurl.format(parsed));\n}\n\n\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n *     md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.js) -\n *   configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.js) -\n *   similar to GFM, used when no preset name given. Enables all available rules,\n *   but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.js) -\n *   all rules disabled. Useful to quickly setup your config via `.enable()`.\n *   For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n *   That's not safe! You may need external sanitizer to protect output from XSS.\n *   It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n *   (`<br />`). This is needed only for full CommonMark compatibility. In real\n *   world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `<br>`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n *   Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__  - `false`. Set `true` to enable [some language-neutral\n *   replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js) +\n *   quotes beautification (smartquotes).\n * - __quotes__ - `“”‘’`, String or Array. Double + single quotes replacement\n *   pairs, when typographer enabled and smartquotes on. For example, you can\n *   use `'«»„“'` for Russian, `'„“‚‘'` for German, and\n *   `['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n *   Highlighter `function (str, lang)` should return escaped HTML. It can also\n *   return empty string if the source was not changed and should be escaped\n *   externaly. If result starts with <pre... internal wrapper is skipped.\n *\n * ##### Example\n *\n * ```javascript\n * // commonmark mode\n * var md = require('markdown-it')('commonmark');\n *\n * // default mode\n * var md = require('markdown-it')();\n *\n * // enable everything\n * var md = require('markdown-it')({\n *   html: true,\n *   linkify: true,\n *   typographer: true\n * });\n * ```\n *\n * ##### Syntax highlighting\n *\n * ```js\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * var md = require('markdown-it')({\n *   highlight: function (str, lang) {\n *     if (lang && hljs.getLanguage(lang)) {\n *       try {\n *         return hljs.highlight(lang, str, true).value;\n *       } catch (__) {}\n *     }\n *\n *     return ''; // use external default escaping\n *   }\n * });\n * ```\n *\n * Or with full wrapper override (if you need assign class to `<pre>`):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n *   highlight: function (str, lang) {\n *     if (lang && hljs.getLanguage(lang)) {\n *       try {\n *         return '<pre class=\"hljs\"><code>' +\n *                hljs.highlight(lang, str, true).value +\n *                '</code></pre>';\n *       } catch (__) {}\n *     }\n *\n *     return '<pre class=\"hljs\"><code>' + md.utils.escapeHtml(str) + '</code></pre>';\n *   }\n * });\n * ```\n *\n **/\nfunction MarkdownIt(presetName, options) {\n  if (!(this instanceof MarkdownIt)) {\n    return new MarkdownIt(presetName, options);\n  }\n\n  if (!options) {\n    if (!utils.isString(presetName)) {\n      options = presetName || {};\n      presetName = 'default';\n    }\n  }\n\n  /**\n   * MarkdownIt#inline -> ParserInline\n   *\n   * Instance of [[ParserInline]]. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n  this.inline = new ParserInline();\n\n  /**\n   * MarkdownIt#block -> ParserBlock\n   *\n   * Instance of [[ParserBlock]]. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n  this.block = new ParserBlock();\n\n  /**\n   * MarkdownIt#core -> Core\n   *\n   * Instance of [[Core]] chain executor. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n  this.core = new ParserCore();\n\n  /**\n   * MarkdownIt#renderer -> Renderer\n   *\n   * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n   * rules for new token types, generated by plugins.\n   *\n   * ##### Example\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   *\n   * function myToken(tokens, idx, options, env, self) {\n   *   //...\n   *   return result;\n   * };\n   *\n   * md.renderer.rules['my_token'] = myToken\n   * ```\n   *\n   * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js).\n   **/\n  this.renderer = new Renderer();\n\n  /**\n   * MarkdownIt#linkify -> LinkifyIt\n   *\n   * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n   * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.js)\n   * rule.\n   **/\n  this.linkify = new LinkifyIt();\n\n  /**\n   * MarkdownIt#validateLink(url) -> Boolean\n   *\n   * Link validation function. CommonMark allows too much in links. By default\n   * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n   * except some embedded image types.\n   *\n   * You can change this behaviour:\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   * // enable everything\n   * md.validateLink = function () { return true; }\n   * ```\n   **/\n  this.validateLink = validateLink;\n\n  /**\n   * MarkdownIt#normalizeLink(url) -> String\n   *\n   * Function used to encode link url to a machine-readable format,\n   * which includes url-encoding, punycode, etc.\n   **/\n  this.normalizeLink = normalizeLink;\n\n  /**\n   * MarkdownIt#normalizeLinkText(url) -> String\n   *\n   * Function used to decode link url to a human-readable format`\n   **/\n  this.normalizeLinkText = normalizeLinkText;\n\n\n  // Expose utils & helpers for easy acces from plugins\n\n  /**\n   * MarkdownIt#utils -> utils\n   *\n   * Assorted utility functions, useful to write plugins. See details\n   * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.js).\n   **/\n  this.utils = utils;\n\n  /**\n   * MarkdownIt#helpers -> helpers\n   *\n   * Link components parser functions, useful to write plugins. See details\n   * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n   **/\n  this.helpers = utils.assign({}, helpers);\n\n\n  this.options = {};\n  this.configure(presetName);\n\n  if (options) { this.set(options); }\n}\n\n\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n *             .set({ html: true, breaks: true })\n *             .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\nMarkdownIt.prototype.set = function (options) {\n  utils.assign(this.options, options);\n  return this;\n};\n\n\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you will - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\nMarkdownIt.prototype.configure = function (presets) {\n  var self = this, presetName;\n\n  if (utils.isString(presets)) {\n    presetName = presets;\n    presets = config[presetName];\n    if (!presets) { throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name'); }\n  }\n\n  if (!presets) { throw new Error('Wrong `markdown-it` preset, can\\'t be empty'); }\n\n  if (presets.options) { self.set(presets.options); }\n\n  if (presets.components) {\n    Object.keys(presets.components).forEach(function (name) {\n      if (presets.components[name].rules) {\n        self[name].ruler.enableOnly(presets.components[name].rules);\n      }\n      if (presets.components[name].rules2) {\n        self[name].ruler2.enableOnly(presets.components[name].rules2);\n      }\n    });\n  }\n  return this;\n};\n\n\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n *             .enable(['sub', 'sup'])\n *             .disable('smartquotes');\n * ```\n **/\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n  var result = [];\n\n  if (!Array.isArray(list)) { list = [ list ]; }\n\n  [ 'core', 'block', 'inline' ].forEach(function (chain) {\n    result = result.concat(this[chain].ruler.enable(list, true));\n  }, this);\n\n  result = result.concat(this.inline.ruler2.enable(list, true));\n\n  var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n  if (missed.length && !ignoreInvalid) {\n    throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed);\n  }\n\n  return this;\n};\n\n\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n  var result = [];\n\n  if (!Array.isArray(list)) { list = [ list ]; }\n\n  [ 'core', 'block', 'inline' ].forEach(function (chain) {\n    result = result.concat(this[chain].ruler.disable(list, true));\n  }, this);\n\n  result = result.concat(this.inline.ruler2.disable(list, true));\n\n  var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n  if (missed.length && !ignoreInvalid) {\n    throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed);\n  }\n  return this;\n};\n\n\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n *             .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n *               tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n *             });\n * ```\n **/\nMarkdownIt.prototype.use = function (plugin /*, params, ... */) {\n  var args = [ this ].concat(Array.prototype.slice.call(arguments, 1));\n  plugin.apply(plugin, args);\n  return this;\n};\n\n\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and return list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\nMarkdownIt.prototype.parse = function (src, env) {\n  if (typeof src !== 'string') {\n    throw new Error('Input data should be a String');\n  }\n\n  var state = new this.core.State(src, this, env);\n\n  this.core.process(state);\n\n  return state.tokens;\n};\n\n\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\nMarkdownIt.prototype.render = function (src, env) {\n  env = env || {};\n\n  return this.renderer.render(this.parse(src, env), this.options, env);\n};\n\n\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\nMarkdownIt.prototype.parseInline = function (src, env) {\n  var state = new this.core.State(src, this, env);\n\n  state.inlineMode = true;\n  this.core.process(state);\n\n  return state.tokens;\n};\n\n\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `<p>` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n  env = env || {};\n\n  return this.renderer.render(this.parseInline(src, env), this.options, env);\n};\n\n\nmodule.exports = MarkdownIt;\n","\n'use strict';\n\n\nvar encodeCache = {};\n\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache(exclude) {\n  var i, ch, cache = encodeCache[exclude];\n  if (cache) { return cache; }\n\n  cache = encodeCache[exclude] = [];\n\n  for (i = 0; i < 128; i++) {\n    ch = String.fromCharCode(i);\n\n    if (/^[0-9a-z]$/i.test(ch)) {\n      // always allow unencoded alphanumeric characters\n      cache.push(ch);\n    } else {\n      cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n    }\n  }\n\n  for (i = 0; i < exclude.length; i++) {\n    cache[exclude.charCodeAt(i)] = exclude[i];\n  }\n\n  return cache;\n}\n\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n//  - string       - string to encode\n//  - exclude      - list of characters to ignore (in addition to a-zA-Z0-9)\n//  - keepEscaped  - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode(string, exclude, keepEscaped) {\n  var i, l, code, nextCode, cache,\n      result = '';\n\n  if (typeof exclude !== 'string') {\n    // encode(string, keepEscaped)\n    keepEscaped  = exclude;\n    exclude = encode.defaultChars;\n  }\n\n  if (typeof keepEscaped === 'undefined') {\n    keepEscaped = true;\n  }\n\n  cache = getEncodeCache(exclude);\n\n  for (i = 0, l = string.length; i < l; i++) {\n    code = string.charCodeAt(i);\n\n    if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n      if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n        result += string.slice(i, i + 3);\n        i += 2;\n        continue;\n      }\n    }\n\n    if (code < 128) {\n      result += cache[code];\n      continue;\n    }\n\n    if (code >= 0xD800 && code <= 0xDFFF) {\n      if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n        nextCode = string.charCodeAt(i + 1);\n        if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n          result += encodeURIComponent(string[i] + string[i + 1]);\n          i++;\n          continue;\n        }\n      }\n      result += '%EF%BF%BD';\n      continue;\n    }\n\n    result += encodeURIComponent(string[i]);\n  }\n\n  return result;\n}\n\nencode.defaultChars   = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\n\n\nmodule.exports = encode;\n","\n'use strict';\n\n\n/* eslint-disable no-bitwise */\n\nvar decodeCache = {};\n\nfunction getDecodeCache(exclude) {\n  var i, ch, cache = decodeCache[exclude];\n  if (cache) { return cache; }\n\n  cache = decodeCache[exclude] = [];\n\n  for (i = 0; i < 128; i++) {\n    ch = String.fromCharCode(i);\n    cache.push(ch);\n  }\n\n  for (i = 0; i < exclude.length; i++) {\n    ch = exclude.charCodeAt(i);\n    cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2);\n  }\n\n  return cache;\n}\n\n\n// Decode percent-encoded string.\n//\nfunction decode(string, exclude) {\n  var cache;\n\n  if (typeof exclude !== 'string') {\n    exclude = decode.defaultChars;\n  }\n\n  cache = getDecodeCache(exclude);\n\n  return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) {\n    var i, l, b1, b2, b3, b4, chr,\n        result = '';\n\n    for (i = 0, l = seq.length; i < l; i += 3) {\n      b1 = parseInt(seq.slice(i + 1, i + 3), 16);\n\n      if (b1 < 0x80) {\n        result += cache[b1];\n        continue;\n      }\n\n      if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n        // 110xxxxx 10xxxxxx\n        b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n\n        if ((b2 & 0xC0) === 0x80) {\n          chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F);\n\n          if (chr < 0x80) {\n            result += '\\ufffd\\ufffd';\n          } else {\n            result += String.fromCharCode(chr);\n          }\n\n          i += 3;\n          continue;\n        }\n      }\n\n      if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n        // 1110xxxx 10xxxxxx 10xxxxxx\n        b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n        b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n          chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F);\n\n          if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n            result += '\\ufffd\\ufffd\\ufffd';\n          } else {\n            result += String.fromCharCode(chr);\n          }\n\n          i += 6;\n          continue;\n        }\n      }\n\n      if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n        // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n        b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n        b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n        b4 = parseInt(seq.slice(i + 10, i + 12), 16);\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n          chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F);\n\n          if (chr < 0x10000 || chr > 0x10FFFF) {\n            result += '\\ufffd\\ufffd\\ufffd\\ufffd';\n          } else {\n            chr -= 0x10000;\n            result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF));\n          }\n\n          i += 9;\n          continue;\n        }\n      }\n\n      result += '\\ufffd';\n    }\n\n    return result;\n  });\n}\n\n\ndecode.defaultChars   = ';/?:@&=+$,#';\ndecode.componentChars = '';\n\n\nmodule.exports = decode;\n","\n'use strict';\n\n\nmodule.exports = function format(url) {\n  var result = '';\n\n  result += url.protocol || '';\n  result += url.slashes ? '//' : '';\n  result += url.auth ? url.auth + '@' : '';\n\n  if (url.hostname && url.hostname.indexOf(':') !== -1) {\n    // ipv6 address\n    result += '[' + url.hostname + ']';\n  } else {\n    result += url.hostname || '';\n  }\n\n  result += url.port ? ':' + url.port : '';\n  result += url.pathname || '';\n  result += url.search || '';\n  result += url.hash || '';\n\n  return result;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n//    e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n//    so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n//    i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n//    (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n//    which can be constructed using other parts of the url.\n//\n\n\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.pathname = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n    portPattern = /:[0-9]*$/,\n\n    // Special case for a simple path URL\n    simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n    // RFC 2396: characters reserved for delimiting URLs.\n    // We actually just auto-escape these.\n    delims = [ '<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t' ],\n\n    // RFC 2396: characters not allowed for various reasons.\n    unwise = [ '{', '}', '|', '\\\\', '^', '`' ].concat(delims),\n\n    // Allowed by RFCs, but cause of XSS attacks.  Always escape these.\n    autoEscape = [ '\\'' ].concat(unwise),\n    // Characters that are never ever allowed in a hostname.\n    // Note that any invalid chars are also handled, but these\n    // are the ones that are *expected* to be seen, so we fast-path\n    // them.\n    nonHostChars = [ '%', '/', '?', ';', '#' ].concat(autoEscape),\n    hostEndingChars = [ '/', '?', '#' ],\n    hostnameMaxLen = 255,\n    hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n    hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n    // protocols that can allow \"unsafe\" and \"unwise\" chars.\n    /* eslint-disable no-script-url */\n    // protocols that never have a hostname.\n    hostlessProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that always contain a // bit.\n    slashedProtocol = {\n      'http': true,\n      'https': true,\n      'ftp': true,\n      'gopher': true,\n      'file': true,\n      'http:': true,\n      'https:': true,\n      'ftp:': true,\n      'gopher:': true,\n      'file:': true\n    };\n    /* eslint-enable no-script-url */\n\nfunction urlParse(url, slashesDenoteHost) {\n  if (url && url instanceof Url) { return url; }\n\n  var u = new Url();\n  u.parse(url, slashesDenoteHost);\n  return u;\n}\n\nUrl.prototype.parse = function(url, slashesDenoteHost) {\n  var i, l, lowerProto, hec, slashes,\n      rest = url;\n\n  // trim before proceeding.\n  // This is to support parse stuff like \"  http://foo.com  \\n\"\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    var simplePath = simplePathPattern.exec(rest);\n    if (simplePath) {\n      this.pathname = simplePath[1];\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n      }\n      return this;\n    }\n  }\n\n  var proto = protocolPattern.exec(rest);\n  if (proto) {\n    proto = proto[0];\n    lowerProto = proto.toLowerCase();\n    this.protocol = proto;\n    rest = rest.substr(proto.length);\n  }\n\n  // figure out if it's got a host\n  // user@server is *always* interpreted as a hostname, and url\n  // resolution will treat //foo/bar as host=foo,path=bar because that's\n  // how the browser resolves relative URLs.\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    slashes = rest.substr(0, 2) === '//';\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n\n  if (!hostlessProtocol[proto] &&\n      (slashes || (proto && !slashedProtocol[proto]))) {\n\n    // there's a hostname.\n    // the first instance of /, ?, ;, or # ends the host.\n    //\n    // If there is an @ in the hostname, then non-host chars *are* allowed\n    // to the left of the last @ sign, unless some host-ending character\n    // comes *before* the @-sign.\n    // URLs are obnoxious.\n    //\n    // ex:\n    // http://a@b@c/ => user:a@b host:c\n    // http://a@b?@c => user:a host:c path:/?@c\n\n    // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n    // Review our test case against browsers more comprehensively.\n\n    // find the first instance of any hostEndingChars\n    var hostEnd = -1;\n    for (i = 0; i < hostEndingChars.length; i++) {\n      hec = rest.indexOf(hostEndingChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n        hostEnd = hec;\n      }\n    }\n\n    // at this point, either we have an explicit point where the\n    // auth portion cannot go past, or the last @ char is the decider.\n    var auth, atSign;\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      // atSign must be in auth portion.\n      // http://a@b/c@d => host:b auth:a path:/c@d\n      atSign = rest.lastIndexOf('@', hostEnd);\n    }\n\n    // Now we have a portion which is definitely the auth.\n    // Pull that off.\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = auth;\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1;\n    for (i = 0; i < nonHostChars.length; i++) {\n      hec = rest.indexOf(nonHostChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n        hostEnd = hec;\n      }\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1) {\n      hostEnd = rest.length;\n    }\n\n    if (rest[hostEnd - 1] === ':') { hostEnd--; }\n    var host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd);\n\n    // pull out port.\n    this.parseHost(host);\n\n    // we've indicated that there is a hostname,\n    // so even if it's empty, it has to be present.\n    this.hostname = this.hostname || '';\n\n    // if hostname begins with [ and ends with ]\n    // assume that it's an IPv6 address.\n    var ipv6Hostname = this.hostname[0] === '[' &&\n        this.hostname[this.hostname.length - 1] === ']';\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      var hostparts = this.hostname.split(/\\./);\n      for (i = 0, l = hostparts.length; i < l; i++) {\n        var part = hostparts[i];\n        if (!part) { continue; }\n        if (!part.match(hostnamePartPattern)) {\n          var newpart = '';\n          for (var j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              // we replace non-ASCII char with a temporary placeholder\n              // we need this to make sure size of hostname is not\n              // broken by replacing non-ASCII by nothing\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            var validParts = hostparts.slice(0, i);\n            var notHost = hostparts.slice(i + 1);\n            var bit = part.match(hostnamePartStart);\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n            if (notHost.length) {\n              rest = notHost.join('.') + rest;\n            }\n            this.hostname = validParts.join('.');\n            break;\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = '';\n    }\n\n    // strip [ and ] from the hostname\n    // the host field still retains them, though\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n    }\n  }\n\n  // chop off from the tail first.\n  var hash = rest.indexOf('#');\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n  var qm = rest.indexOf('?');\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    rest = rest.slice(0, qm);\n  }\n  if (rest) { this.pathname = rest; }\n  if (slashedProtocol[lowerProto] &&\n      this.hostname && !this.pathname) {\n    this.pathname = '';\n  }\n\n  return this;\n};\n\nUrl.prototype.parseHost = function(host) {\n  var port = portPattern.exec(host);\n  if (port) {\n    port = port[0];\n    if (port !== ':') {\n      this.port = port.substr(1);\n    }\n    host = host.substr(0, host.length - port.length);\n  }\n  if (host) { this.hostname = host; }\n};\n\nmodule.exports = urlParse;\n","'use strict';\n\nexports.Any = require('./properties/Any/regex');\nexports.Cc  = require('./categories/Cc/regex');\nexports.Cf  = require('./categories/Cf/regex');\nexports.P   = require('./categories/P/regex');\nexports.Z   = require('./categories/Z/regex');\n","module.exports=/[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/","// Just a shortcut for bulk export\n'use strict';\n\n\nexports.parseLinkLabel       = require('./parse_link_label');\nexports.parseLinkDestination = require('./parse_link_destination');\nexports.parseLinkTitle       = require('./parse_link_title');\n","// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n'use strict';\n\nmodule.exports = function parseLinkLabel(state, start, disableNested) {\n  var level, found, marker, prevPos,\n      labelEnd = -1,\n      max = state.posMax,\n      oldPos = state.pos;\n\n  state.pos = start + 1;\n  level = 1;\n\n  while (state.pos < max) {\n    marker = state.src.charCodeAt(state.pos);\n    if (marker === 0x5D /* ] */) {\n      level--;\n      if (level === 0) {\n        found = true;\n        break;\n      }\n    }\n\n    prevPos = state.pos;\n    state.md.inline.skipToken(state);\n    if (marker === 0x5B /* [ */) {\n      if (prevPos === state.pos - 1) {\n        // increase level if we find text `[`, which is not a part of any token\n        level++;\n      } else if (disableNested) {\n        state.pos = oldPos;\n        return -1;\n      }\n    }\n  }\n\n  if (found) {\n    labelEnd = state.pos;\n  }\n\n  // restore old state\n  state.pos = oldPos;\n\n  return labelEnd;\n};\n","// Parse link destination\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkDestination(str, pos, max) {\n  var code, level,\n      lines = 0,\n      start = pos,\n      result = {\n        ok: false,\n        pos: 0,\n        lines: 0,\n        str: ''\n      };\n\n  if (str.charCodeAt(pos) === 0x3C /* < */) {\n    pos++;\n    while (pos < max) {\n      code = str.charCodeAt(pos);\n      if (code === 0x0A /* \\n */) { return result; }\n      if (code === 0x3E /* > */) {\n        result.pos = pos + 1;\n        result.str = unescapeAll(str.slice(start + 1, pos));\n        result.ok = true;\n        return result;\n      }\n      if (code === 0x5C /* \\ */ && pos + 1 < max) {\n        pos += 2;\n        continue;\n      }\n\n      pos++;\n    }\n\n    // no closing '>'\n    return result;\n  }\n\n  // this should be ... } else { ... branch\n\n  level = 0;\n  while (pos < max) {\n    code = str.charCodeAt(pos);\n\n    if (code === 0x20) { break; }\n\n    // ascii control characters\n    if (code < 0x20 || code === 0x7F) { break; }\n\n    if (code === 0x5C /* \\ */ && pos + 1 < max) {\n      pos += 2;\n      continue;\n    }\n\n    if (code === 0x28 /* ( */) {\n      level++;\n    }\n\n    if (code === 0x29 /* ) */) {\n      if (level === 0) { break; }\n      level--;\n    }\n\n    pos++;\n  }\n\n  if (start === pos) { return result; }\n  if (level !== 0) { return result; }\n\n  result.str = unescapeAll(str.slice(start, pos));\n  result.lines = lines;\n  result.pos = pos;\n  result.ok = true;\n  return result;\n};\n","// Parse link title\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkTitle(str, pos, max) {\n  var code,\n      marker,\n      lines = 0,\n      start = pos,\n      result = {\n        ok: false,\n        pos: 0,\n        lines: 0,\n        str: ''\n      };\n\n  if (pos >= max) { return result; }\n\n  marker = str.charCodeAt(pos);\n\n  if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return result; }\n\n  pos++;\n\n  // if opening marker is \"(\", switch it to closing marker \")\"\n  if (marker === 0x28) { marker = 0x29; }\n\n  while (pos < max) {\n    code = str.charCodeAt(pos);\n    if (code === marker) {\n      result.pos = pos + 1;\n      result.lines = lines;\n      result.str = unescapeAll(str.slice(start + 1, pos));\n      result.ok = true;\n      return result;\n    } else if (code === 0x0A) {\n      lines++;\n    } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n      pos++;\n      if (str.charCodeAt(pos) === 0x0A) {\n        lines++;\n      }\n    }\n\n    pos++;\n  }\n\n  return result;\n};\n","/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n'use strict';\n\n\nvar assign          = require('./common/utils').assign;\nvar unescapeAll     = require('./common/utils').unescapeAll;\nvar escapeHtml      = require('./common/utils').escapeHtml;\n\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar default_rules = {};\n\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n  var token = tokens[idx];\n\n  return  '<code' + slf.renderAttrs(token) + '>' +\n          escapeHtml(tokens[idx].content) +\n          '</code>';\n};\n\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n  var token = tokens[idx];\n\n  return  '<pre' + slf.renderAttrs(token) + '><code>' +\n          escapeHtml(tokens[idx].content) +\n          '</code></pre>\\n';\n};\n\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n  var token = tokens[idx],\n      info = token.info ? unescapeAll(token.info).trim() : '',\n      langName = '',\n      highlighted, i, tmpAttrs, tmpToken;\n\n  if (info) {\n    langName = info.split(/\\s+/g)[0];\n  }\n\n  if (options.highlight) {\n    highlighted = options.highlight(token.content, langName) || escapeHtml(token.content);\n  } else {\n    highlighted = escapeHtml(token.content);\n  }\n\n  if (highlighted.indexOf('<pre') === 0) {\n    return highlighted + '\\n';\n  }\n\n  // If language exists, inject class gently, without modifying original token.\n  // May be, one day we will add .clone() for token and simplify this part, but\n  // now we prefer to keep things local.\n  if (info) {\n    i        = token.attrIndex('class');\n    tmpAttrs = token.attrs ? token.attrs.slice() : [];\n\n    if (i < 0) {\n      tmpAttrs.push([ 'class', options.langPrefix + langName ]);\n    } else {\n      tmpAttrs[i][1] += ' ' + options.langPrefix + langName;\n    }\n\n    // Fake token just to render attributes\n    tmpToken = {\n      attrs: tmpAttrs\n    };\n\n    return  '<pre><code' + slf.renderAttrs(tmpToken) + '>'\n          + highlighted\n          + '</code></pre>\\n';\n  }\n\n\n  return  '<pre><code' + slf.renderAttrs(token) + '>'\n        + highlighted\n        + '</code></pre>\\n';\n};\n\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n  var token = tokens[idx];\n\n  // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n  // should be placed on proper position for tests.\n  //\n  // Replace content with actual value\n\n  token.attrs[token.attrIndex('alt')][1] =\n    slf.renderInlineAsText(token.children, options, env);\n\n  return slf.renderToken(tokens, idx, options);\n};\n\n\ndefault_rules.hardbreak = function (tokens, idx, options /*, env */) {\n  return options.xhtmlOut ? '<br />\\n' : '<br>\\n';\n};\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n  return options.breaks ? (options.xhtmlOut ? '<br />\\n' : '<br>\\n') : '\\n';\n};\n\n\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n  return escapeHtml(tokens[idx].content);\n};\n\n\ndefault_rules.html_block = function (tokens, idx /*, options, env */) {\n  return tokens[idx].content;\n};\ndefault_rules.html_inline = function (tokens, idx /*, options, env */) {\n  return tokens[idx].content;\n};\n\n\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer() {\n\n  /**\n   * Renderer#rules -> Object\n   *\n   * Contains render rules for tokens. Can be updated and extended.\n   *\n   * ##### Example\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   *\n   * md.renderer.rules.strong_open  = function () { return '<b>'; };\n   * md.renderer.rules.strong_close = function () { return '</b>'; };\n   *\n   * var result = md.renderInline(...);\n   * ```\n   *\n   * Each rule is called as independent static function with fixed signature:\n   *\n   * ```javascript\n   * function my_token_render(tokens, idx, options, env, renderer) {\n   *   // ...\n   *   return renderedHTML;\n   * }\n   * ```\n   *\n   * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js)\n   * for more details and examples.\n   **/\n  this.rules = assign({}, default_rules);\n}\n\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs(token) {\n  var i, l, result;\n\n  if (!token.attrs) { return ''; }\n\n  result = '';\n\n  for (i = 0, l = token.attrs.length; i < l; i++) {\n    result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"';\n  }\n\n  return result;\n};\n\n\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\nRenderer.prototype.renderToken = function renderToken(tokens, idx, options) {\n  var nextToken,\n      result = '',\n      needLf = false,\n      token = tokens[idx];\n\n  // Tight list paragraphs\n  if (token.hidden) {\n    return '';\n  }\n\n  // Insert a newline between hidden paragraph and subsequent opening\n  // block-level tag.\n  //\n  // For example, here we should insert a newline before blockquote:\n  //  - a\n  //    >\n  //\n  if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n    result += '\\n';\n  }\n\n  // Add token name, e.g. `<img`\n  result += (token.nesting === -1 ? '</' : '<') + token.tag;\n\n  // Encode attributes, e.g. `<img src=\"foo\"`\n  result += this.renderAttrs(token);\n\n  // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n  if (token.nesting === 0 && options.xhtmlOut) {\n    result += ' /';\n  }\n\n  // Check if we need to add a newline after this tag\n  if (token.block) {\n    needLf = true;\n\n    if (token.nesting === 1) {\n      if (idx + 1 < tokens.length) {\n        nextToken = tokens[idx + 1];\n\n        if (nextToken.type === 'inline' || nextToken.hidden) {\n          // Block-level tag containing an inline tag.\n          //\n          needLf = false;\n\n        } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n          // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n          //\n          needLf = false;\n        }\n      }\n    }\n  }\n\n  result += needLf ? '>\\n' : '>';\n\n  return result;\n};\n\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to renter\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\nRenderer.prototype.renderInline = function (tokens, options, env) {\n  var type,\n      result = '',\n      rules = this.rules;\n\n  for (var i = 0, len = tokens.length; i < len; i++) {\n    type = tokens[i].type;\n\n    if (typeof rules[type] !== 'undefined') {\n      result += rules[type](tokens, i, options, env, this);\n    } else {\n      result += this.renderToken(tokens, i, options);\n    }\n  }\n\n  return result;\n};\n\n\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to renter\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n  var result = '';\n\n  for (var i = 0, len = tokens.length; i < len; i++) {\n    if (tokens[i].type === 'text') {\n      result += tokens[i].content;\n    } else if (tokens[i].type === 'image') {\n      result += this.renderInlineAsText(tokens[i].children, options, env);\n    }\n  }\n\n  return result;\n};\n\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to renter\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\nRenderer.prototype.render = function (tokens, options, env) {\n  var i, len, type,\n      result = '',\n      rules = this.rules;\n\n  for (i = 0, len = tokens.length; i < len; i++) {\n    type = tokens[i].type;\n\n    if (type === 'inline') {\n      result += this.renderInline(tokens[i].children, options, env);\n    } else if (typeof rules[type] !== 'undefined') {\n      result += rules[tokens[i].type](tokens, i, options, env, this);\n    } else {\n      result += this.renderToken(tokens, i, options, env);\n    }\n  }\n\n  return result;\n};\n\nmodule.exports = Renderer;\n","/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n'use strict';\n\n\nvar Ruler  = require('./ruler');\n\n\nvar _rules = [\n  [ 'normalize',      require('./rules_core/normalize')      ],\n  [ 'block',          require('./rules_core/block')          ],\n  [ 'inline',         require('./rules_core/inline')         ],\n  [ 'linkify',        require('./rules_core/linkify')        ],\n  [ 'replacements',   require('./rules_core/replacements')   ],\n  [ 'smartquotes',    require('./rules_core/smartquotes')    ]\n];\n\n\n/**\n * new Core()\n **/\nfunction Core() {\n  /**\n   * Core#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of core rules.\n   **/\n  this.ruler = new Ruler();\n\n  for (var i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1]);\n  }\n}\n\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n  var i, l, rules;\n\n  rules = this.ruler.getRules('');\n\n  for (i = 0, l = rules.length; i < l; i++) {\n    rules[i](state);\n  }\n};\n\nCore.prototype.State = require('./rules_core/state_core');\n\n\nmodule.exports = Core;\n","// Normalize input string\n\n'use strict';\n\n\n// https://spec.commonmark.org/0.29/#line-ending\nvar NEWLINES_RE  = /\\r\\n?|\\n/g;\nvar NULL_RE      = /\\0/g;\n\n\nmodule.exports = function normalize(state) {\n  var str;\n\n  // Normalize newlines\n  str = state.src.replace(NEWLINES_RE, '\\n');\n\n  // Replace NULL characters\n  str = str.replace(NULL_RE, '\\uFFFD');\n\n  state.src = str;\n};\n","'use strict';\n\n\nmodule.exports = function block(state) {\n  var token;\n\n  if (state.inlineMode) {\n    token          = new state.Token('inline', '', 0);\n    token.content  = state.src;\n    token.map      = [ 0, 1 ];\n    token.children = [];\n    state.tokens.push(token);\n  } else {\n    state.md.block.parse(state.src, state.md, state.env, state.tokens);\n  }\n};\n","'use strict';\n\nmodule.exports = function inline(state) {\n  var tokens = state.tokens, tok, i, l;\n\n  // Parse inlines\n  for (i = 0, l = tokens.length; i < l; i++) {\n    tok = tokens[i];\n    if (tok.type === 'inline') {\n      state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n    }\n  }\n};\n","// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n'use strict';\n\n\nvar arrayReplaceAt = require('../common/utils').arrayReplaceAt;\n\n\nfunction isLinkOpen(str) {\n  return /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n  return /^<\\/a\\s*>/i.test(str);\n}\n\n\nmodule.exports = function linkify(state) {\n  var i, j, l, tokens, token, currentToken, nodes, ln, text, pos, lastPos,\n      level, htmlLinkLevel, url, fullUrl, urlText,\n      blockTokens = state.tokens,\n      links;\n\n  if (!state.md.options.linkify) { return; }\n\n  for (j = 0, l = blockTokens.length; j < l; j++) {\n    if (blockTokens[j].type !== 'inline' ||\n        !state.md.linkify.pretest(blockTokens[j].content)) {\n      continue;\n    }\n\n    tokens = blockTokens[j].children;\n\n    htmlLinkLevel = 0;\n\n    // We scan from the end, to keep position when new tags added.\n    // Use reversed logic in links start/end match\n    for (i = tokens.length - 1; i >= 0; i--) {\n      currentToken = tokens[i];\n\n      // Skip content of markdown links\n      if (currentToken.type === 'link_close') {\n        i--;\n        while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n          i--;\n        }\n        continue;\n      }\n\n      // Skip content of html tag links\n      if (currentToken.type === 'html_inline') {\n        if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n          htmlLinkLevel--;\n        }\n        if (isLinkClose(currentToken.content)) {\n          htmlLinkLevel++;\n        }\n      }\n      if (htmlLinkLevel > 0) { continue; }\n\n      if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n\n        text = currentToken.content;\n        links = state.md.linkify.match(text);\n\n        // Now split string to nodes\n        nodes = [];\n        level = currentToken.level;\n        lastPos = 0;\n\n        for (ln = 0; ln < links.length; ln++) {\n\n          url = links[ln].url;\n          fullUrl = state.md.normalizeLink(url);\n          if (!state.md.validateLink(fullUrl)) { continue; }\n\n          urlText = links[ln].text;\n\n          // Linkifier might send raw hostnames like \"example.com\", where url\n          // starts with domain name. So we prepend http:// in those cases,\n          // and remove it afterwards.\n          //\n          if (!links[ln].schema) {\n            urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '');\n          } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n            urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '');\n          } else {\n            urlText = state.md.normalizeLinkText(urlText);\n          }\n\n          pos = links[ln].index;\n\n          if (pos > lastPos) {\n            token         = new state.Token('text', '', 0);\n            token.content = text.slice(lastPos, pos);\n            token.level   = level;\n            nodes.push(token);\n          }\n\n          token         = new state.Token('link_open', 'a', 1);\n          token.attrs   = [ [ 'href', fullUrl ] ];\n          token.level   = level++;\n          token.markup  = 'linkify';\n          token.info    = 'auto';\n          nodes.push(token);\n\n          token         = new state.Token('text', '', 0);\n          token.content = urlText;\n          token.level   = level;\n          nodes.push(token);\n\n          token         = new state.Token('link_close', 'a', -1);\n          token.level   = --level;\n          token.markup  = 'linkify';\n          token.info    = 'auto';\n          nodes.push(token);\n\n          lastPos = links[ln].lastIndex;\n        }\n        if (lastPos < text.length) {\n          token         = new state.Token('text', '', 0);\n          token.content = text.slice(lastPos);\n          token.level   = level;\n          nodes.push(token);\n        }\n\n        // replace current node\n        blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);\n      }\n    }\n  }\n};\n","// Simple typographic replacements\n//\n// (c) (C) → ©\n// (tm) (TM) → ™\n// (r) (R) → ®\n// +- → ±\n// (p) (P) -> §\n// ... → … (also ?.... → ?.., !.... → !..)\n// ???????? → ???, !!!!! → !!!, `,,` → `,`\n// -- → &ndash;, --- → &mdash;\n//\n'use strict';\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾\n// - miltiplication 2 x 4 -> 2 × 4\n\nvar RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/;\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nvar SCOPED_ABBR_TEST_RE = /\\((c|tm|r|p)\\)/i;\n\nvar SCOPED_ABBR_RE = /\\((c|tm|r|p)\\)/ig;\nvar SCOPED_ABBR = {\n  c: '©',\n  r: '®',\n  p: '§',\n  tm: '™'\n};\n\nfunction replaceFn(match, name) {\n  return SCOPED_ABBR[name.toLowerCase()];\n}\n\nfunction replace_scoped(inlineTokens) {\n  var i, token, inside_autolink = 0;\n\n  for (i = inlineTokens.length - 1; i >= 0; i--) {\n    token = inlineTokens[i];\n\n    if (token.type === 'text' && !inside_autolink) {\n      token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n    }\n\n    if (token.type === 'link_open' && token.info === 'auto') {\n      inside_autolink--;\n    }\n\n    if (token.type === 'link_close' && token.info === 'auto') {\n      inside_autolink++;\n    }\n  }\n}\n\nfunction replace_rare(inlineTokens) {\n  var i, token, inside_autolink = 0;\n\n  for (i = inlineTokens.length - 1; i >= 0; i--) {\n    token = inlineTokens[i];\n\n    if (token.type === 'text' && !inside_autolink) {\n      if (RARE_RE.test(token.content)) {\n        token.content = token.content\n          .replace(/\\+-/g, '±')\n          // .., ..., ....... -> …\n          // but ?..... & !..... -> ?.. & !..\n          .replace(/\\.{2,}/g, '…').replace(/([?!])…/g, '$1..')\n          .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n          // em-dash\n          .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\\u2014')\n          // en-dash\n          .replace(/(^|\\s)--(?=\\s|$)/mg, '$1\\u2013')\n          .replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, '$1\\u2013');\n      }\n    }\n\n    if (token.type === 'link_open' && token.info === 'auto') {\n      inside_autolink--;\n    }\n\n    if (token.type === 'link_close' && token.info === 'auto') {\n      inside_autolink++;\n    }\n  }\n}\n\n\nmodule.exports = function replace(state) {\n  var blkIdx;\n\n  if (!state.md.options.typographer) { return; }\n\n  for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n    if (state.tokens[blkIdx].type !== 'inline') { continue; }\n\n    if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n      replace_scoped(state.tokens[blkIdx].children);\n    }\n\n    if (RARE_RE.test(state.tokens[blkIdx].content)) {\n      replace_rare(state.tokens[blkIdx].children);\n    }\n\n  }\n};\n","// Convert straight quotation marks to typographic ones\n//\n'use strict';\n\n\nvar isWhiteSpace   = require('../common/utils').isWhiteSpace;\nvar isPunctChar    = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\nvar QUOTE_TEST_RE = /['\"]/;\nvar QUOTE_RE = /['\"]/g;\nvar APOSTROPHE = '\\u2019'; /* ’ */\n\n\nfunction replaceAt(str, index, ch) {\n  return str.substr(0, index) + ch + str.substr(index + 1);\n}\n\nfunction process_inlines(tokens, state) {\n  var i, token, text, t, pos, max, thisLevel, item, lastChar, nextChar,\n      isLastPunctChar, isNextPunctChar, isLastWhiteSpace, isNextWhiteSpace,\n      canOpen, canClose, j, isSingle, stack, openQuote, closeQuote;\n\n  stack = [];\n\n  for (i = 0; i < tokens.length; i++) {\n    token = tokens[i];\n\n    thisLevel = tokens[i].level;\n\n    for (j = stack.length - 1; j >= 0; j--) {\n      if (stack[j].level <= thisLevel) { break; }\n    }\n    stack.length = j + 1;\n\n    if (token.type !== 'text') { continue; }\n\n    text = token.content;\n    pos = 0;\n    max = text.length;\n\n    /*eslint no-labels:0,block-scoped-var:0*/\n    OUTER:\n    while (pos < max) {\n      QUOTE_RE.lastIndex = pos;\n      t = QUOTE_RE.exec(text);\n      if (!t) { break; }\n\n      canOpen = canClose = true;\n      pos = t.index + 1;\n      isSingle = (t[0] === \"'\");\n\n      // Find previous character,\n      // default to space if it's the beginning of the line\n      //\n      lastChar = 0x20;\n\n      if (t.index - 1 >= 0) {\n        lastChar = text.charCodeAt(t.index - 1);\n      } else {\n        for (j = i - 1; j >= 0; j--) {\n          if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // lastChar defaults to 0x20\n          if (tokens[j].type !== 'text') continue;\n\n          lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);\n          break;\n        }\n      }\n\n      // Find next character,\n      // default to space if it's the end of the line\n      //\n      nextChar = 0x20;\n\n      if (pos < max) {\n        nextChar = text.charCodeAt(pos);\n      } else {\n        for (j = i + 1; j < tokens.length; j++) {\n          if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // nextChar defaults to 0x20\n          if (tokens[j].type !== 'text') continue;\n\n          nextChar = tokens[j].content.charCodeAt(0);\n          break;\n        }\n      }\n\n      isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n      isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n      isLastWhiteSpace = isWhiteSpace(lastChar);\n      isNextWhiteSpace = isWhiteSpace(nextChar);\n\n      if (isNextWhiteSpace) {\n        canOpen = false;\n      } else if (isNextPunctChar) {\n        if (!(isLastWhiteSpace || isLastPunctChar)) {\n          canOpen = false;\n        }\n      }\n\n      if (isLastWhiteSpace) {\n        canClose = false;\n      } else if (isLastPunctChar) {\n        if (!(isNextWhiteSpace || isNextPunctChar)) {\n          canClose = false;\n        }\n      }\n\n      if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n        if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n          // special case: 1\"\" - count first quote as an inch\n          canClose = canOpen = false;\n        }\n      }\n\n      if (canOpen && canClose) {\n        // Replace quotes in the middle of punctuation sequence, but not\n        // in the middle of the words, i.e.:\n        //\n        // 1. foo \" bar \" baz - not replaced\n        // 2. foo-\"-bar-\"-baz - replaced\n        // 3. foo\"bar\"baz     - not replaced\n        //\n        canOpen = isLastPunctChar;\n        canClose = isNextPunctChar;\n      }\n\n      if (!canOpen && !canClose) {\n        // middle of word\n        if (isSingle) {\n          token.content = replaceAt(token.content, t.index, APOSTROPHE);\n        }\n        continue;\n      }\n\n      if (canClose) {\n        // this could be a closing quote, rewind the stack to get a match\n        for (j = stack.length - 1; j >= 0; j--) {\n          item = stack[j];\n          if (stack[j].level < thisLevel) { break; }\n          if (item.single === isSingle && stack[j].level === thisLevel) {\n            item = stack[j];\n\n            if (isSingle) {\n              openQuote = state.md.options.quotes[2];\n              closeQuote = state.md.options.quotes[3];\n            } else {\n              openQuote = state.md.options.quotes[0];\n              closeQuote = state.md.options.quotes[1];\n            }\n\n            // replace token.content *before* tokens[item.token].content,\n            // because, if they are pointing at the same token, replaceAt\n            // could mess up indices when quote length != 1\n            token.content = replaceAt(token.content, t.index, closeQuote);\n            tokens[item.token].content = replaceAt(\n              tokens[item.token].content, item.pos, openQuote);\n\n            pos += closeQuote.length - 1;\n            if (item.token === i) { pos += openQuote.length - 1; }\n\n            text = token.content;\n            max = text.length;\n\n            stack.length = j;\n            continue OUTER;\n          }\n        }\n      }\n\n      if (canOpen) {\n        stack.push({\n          token: i,\n          pos: t.index,\n          single: isSingle,\n          level: thisLevel\n        });\n      } else if (canClose && isSingle) {\n        token.content = replaceAt(token.content, t.index, APOSTROPHE);\n      }\n    }\n  }\n}\n\n\nmodule.exports = function smartquotes(state) {\n  /*eslint max-depth:0*/\n  var blkIdx;\n\n  if (!state.md.options.typographer) { return; }\n\n  for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n    if (state.tokens[blkIdx].type !== 'inline' ||\n        !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n      continue;\n    }\n\n    process_inlines(state.tokens[blkIdx].children, state);\n  }\n};\n","// Core state object\n//\n'use strict';\n\nvar Token = require('../token');\n\n\nfunction StateCore(src, md, env) {\n  this.src = src;\n  this.env = env;\n  this.tokens = [];\n  this.inlineMode = false;\n  this.md = md; // link to parser instance\n}\n\n// re-export Token class to use in core rules\nStateCore.prototype.Token = Token;\n\n\nmodule.exports = StateCore;\n","/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n'use strict';\n\n\nvar Ruler           = require('./ruler');\n\n\nvar _rules = [\n  // First 2 params - rule name & source. Secondary array - list of rules,\n  // which can be terminated by this one.\n  [ 'table',      require('./rules_block/table'),      [ 'paragraph', 'reference' ] ],\n  [ 'code',       require('./rules_block/code') ],\n  [ 'fence',      require('./rules_block/fence'),      [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n  [ 'blockquote', require('./rules_block/blockquote'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n  [ 'hr',         require('./rules_block/hr'),         [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n  [ 'list',       require('./rules_block/list'),       [ 'paragraph', 'reference', 'blockquote' ] ],\n  [ 'reference',  require('./rules_block/reference') ],\n  [ 'heading',    require('./rules_block/heading'),    [ 'paragraph', 'reference', 'blockquote' ] ],\n  [ 'lheading',   require('./rules_block/lheading') ],\n  [ 'html_block', require('./rules_block/html_block'), [ 'paragraph', 'reference', 'blockquote' ] ],\n  [ 'paragraph',  require('./rules_block/paragraph') ]\n];\n\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock() {\n  /**\n   * ParserBlock#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of block rules.\n   **/\n  this.ruler = new Ruler();\n\n  for (var i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() });\n  }\n}\n\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n  var ok, i,\n      rules = this.ruler.getRules(''),\n      len = rules.length,\n      line = startLine,\n      hasEmptyLines = false,\n      maxNesting = state.md.options.maxNesting;\n\n  while (line < endLine) {\n    state.line = line = state.skipEmptyLines(line);\n    if (line >= endLine) { break; }\n\n    // Termination condition for nested calls.\n    // Nested calls currently used for blockquotes & lists\n    if (state.sCount[line] < state.blkIndent) { break; }\n\n    // If nesting level exceeded - skip tail to the end. That's not ordinary\n    // situation and we should not care about content.\n    if (state.level >= maxNesting) {\n      state.line = endLine;\n      break;\n    }\n\n    // Try all possible rules.\n    // On success, rule should:\n    //\n    // - update `state.line`\n    // - update `state.tokens`\n    // - return true\n\n    for (i = 0; i < len; i++) {\n      ok = rules[i](state, line, endLine, false);\n      if (ok) { break; }\n    }\n\n    // set state.tight if we had an empty line before current tag\n    // i.e. latest empty line should not count\n    state.tight = !hasEmptyLines;\n\n    // paragraph might \"eat\" one newline after it in nested lists\n    if (state.isEmpty(state.line - 1)) {\n      hasEmptyLines = true;\n    }\n\n    line = state.line;\n\n    if (line < endLine && state.isEmpty(line)) {\n      hasEmptyLines = true;\n      line++;\n      state.line = line;\n    }\n  }\n};\n\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n  var state;\n\n  if (!src) { return; }\n\n  state = new this.State(src, md, env, outTokens);\n\n  this.tokenize(state, state.line, state.lineMax);\n};\n\n\nParserBlock.prototype.State = require('./rules_block/state_block');\n\n\nmodule.exports = ParserBlock;\n","// GFM table, non-standard\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction getLine(state, line) {\n  var pos = state.bMarks[line] + state.blkIndent,\n      max = state.eMarks[line];\n\n  return state.src.substr(pos, max - pos);\n}\n\nfunction escapedSplit(str) {\n  var result = [],\n      pos = 0,\n      max = str.length,\n      ch,\n      escapes = 0,\n      lastPos = 0,\n      backTicked = false,\n      lastBackTick = 0;\n\n  ch  = str.charCodeAt(pos);\n\n  while (pos < max) {\n    if (ch === 0x60/* ` */) {\n      if (backTicked) {\n        // make \\` close code sequence, but not open it;\n        // the reason is: `\\` is correct code block\n        backTicked = false;\n        lastBackTick = pos;\n      } else if (escapes % 2 === 0) {\n        backTicked = true;\n        lastBackTick = pos;\n      }\n    } else if (ch === 0x7c/* | */ && (escapes % 2 === 0) && !backTicked) {\n      result.push(str.substring(lastPos, pos));\n      lastPos = pos + 1;\n    }\n\n    if (ch === 0x5c/* \\ */) {\n      escapes++;\n    } else {\n      escapes = 0;\n    }\n\n    pos++;\n\n    // If there was an un-closed backtick, go back to just after\n    // the last backtick, but as if it was a normal character\n    if (pos === max && backTicked) {\n      backTicked = false;\n      pos = lastBackTick + 1;\n    }\n\n    ch = str.charCodeAt(pos);\n  }\n\n  result.push(str.substring(lastPos));\n\n  return result;\n}\n\n\nmodule.exports = function table(state, startLine, endLine, silent) {\n  var ch, lineText, pos, i, nextLine, columns, columnCount, token,\n      aligns, t, tableLines, tbodyLines;\n\n  // should have at least two lines\n  if (startLine + 2 > endLine) { return false; }\n\n  nextLine = startLine + 1;\n\n  if (state.sCount[nextLine] < state.blkIndent) { return false; }\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[nextLine] - state.blkIndent >= 4) { return false; }\n\n  // first character of the second line should be '|', '-', ':',\n  // and no other characters are allowed but spaces;\n  // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n  pos = state.bMarks[nextLine] + state.tShift[nextLine];\n  if (pos >= state.eMarks[nextLine]) { return false; }\n\n  ch = state.src.charCodeAt(pos++);\n  if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */) { return false; }\n\n  while (pos < state.eMarks[nextLine]) {\n    ch = state.src.charCodeAt(pos);\n\n    if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false; }\n\n    pos++;\n  }\n\n  lineText = getLine(state, startLine + 1);\n\n  columns = lineText.split('|');\n  aligns = [];\n  for (i = 0; i < columns.length; i++) {\n    t = columns[i].trim();\n    if (!t) {\n      // allow empty columns before and after table, but not in between columns;\n      // e.g. allow ` |---| `, disallow ` ---||--- `\n      if (i === 0 || i === columns.length - 1) {\n        continue;\n      } else {\n        return false;\n      }\n    }\n\n    if (!/^:?-+:?$/.test(t)) { return false; }\n    if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n      aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right');\n    } else if (t.charCodeAt(0) === 0x3A/* : */) {\n      aligns.push('left');\n    } else {\n      aligns.push('');\n    }\n  }\n\n  lineText = getLine(state, startLine).trim();\n  if (lineText.indexOf('|') === -1) { return false; }\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n  columns = escapedSplit(lineText.replace(/^\\||\\|$/g, ''));\n\n  // header row will define an amount of columns in the entire table,\n  // and align row shouldn't be smaller than that (the rest of the rows can)\n  columnCount = columns.length;\n  if (columnCount > aligns.length) { return false; }\n\n  if (silent) { return true; }\n\n  token     = state.push('table_open', 'table', 1);\n  token.map = tableLines = [ startLine, 0 ];\n\n  token     = state.push('thead_open', 'thead', 1);\n  token.map = [ startLine, startLine + 1 ];\n\n  token     = state.push('tr_open', 'tr', 1);\n  token.map = [ startLine, startLine + 1 ];\n\n  for (i = 0; i < columns.length; i++) {\n    token          = state.push('th_open', 'th', 1);\n    token.map      = [ startLine, startLine + 1 ];\n    if (aligns[i]) {\n      token.attrs  = [ [ 'style', 'text-align:' + aligns[i] ] ];\n    }\n\n    token          = state.push('inline', '', 0);\n    token.content  = columns[i].trim();\n    token.map      = [ startLine, startLine + 1 ];\n    token.children = [];\n\n    token          = state.push('th_close', 'th', -1);\n  }\n\n  token     = state.push('tr_close', 'tr', -1);\n  token     = state.push('thead_close', 'thead', -1);\n\n  token     = state.push('tbody_open', 'tbody', 1);\n  token.map = tbodyLines = [ startLine + 2, 0 ];\n\n  for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n    if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n    lineText = getLine(state, nextLine).trim();\n    if (lineText.indexOf('|') === -1) { break; }\n    if (state.sCount[nextLine] - state.blkIndent >= 4) { break; }\n    columns = escapedSplit(lineText.replace(/^\\||\\|$/g, ''));\n\n    token = state.push('tr_open', 'tr', 1);\n    for (i = 0; i < columnCount; i++) {\n      token          = state.push('td_open', 'td', 1);\n      if (aligns[i]) {\n        token.attrs  = [ [ 'style', 'text-align:' + aligns[i] ] ];\n      }\n\n      token          = state.push('inline', '', 0);\n      token.content  = columns[i] ? columns[i].trim() : '';\n      token.children = [];\n\n      token          = state.push('td_close', 'td', -1);\n    }\n    token = state.push('tr_close', 'tr', -1);\n  }\n  token = state.push('tbody_close', 'tbody', -1);\n  token = state.push('table_close', 'table', -1);\n\n  tableLines[1] = tbodyLines[1] = nextLine;\n  state.line = nextLine;\n  return true;\n};\n","// Code block (4 spaces padded)\n\n'use strict';\n\n\nmodule.exports = function code(state, startLine, endLine/*, silent*/) {\n  var nextLine, last, token;\n\n  if (state.sCount[startLine] - state.blkIndent < 4) { return false; }\n\n  last = nextLine = startLine + 1;\n\n  while (nextLine < endLine) {\n    if (state.isEmpty(nextLine)) {\n      nextLine++;\n      continue;\n    }\n\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      nextLine++;\n      last = nextLine;\n      continue;\n    }\n    break;\n  }\n\n  state.line = last;\n\n  token         = state.push('code_block', 'code', 0);\n  token.content = state.getLines(startLine, last, 4 + state.blkIndent, true);\n  token.map     = [ startLine, state.line ];\n\n  return true;\n};\n","// fences (``` lang, ~~~ lang)\n\n'use strict';\n\n\nmodule.exports = function fence(state, startLine, endLine, silent) {\n  var marker, len, params, nextLine, mem, token, markup,\n      haveEndMarker = false,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  if (pos + 3 > max) { return false; }\n\n  marker = state.src.charCodeAt(pos);\n\n  if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n    return false;\n  }\n\n  // scan marker length\n  mem = pos;\n  pos = state.skipChars(pos, marker);\n\n  len = pos - mem;\n\n  if (len < 3) { return false; }\n\n  markup = state.src.slice(mem, pos);\n  params = state.src.slice(pos, max);\n\n  if (marker === 0x60 /* ` */) {\n    if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n      return false;\n    }\n  }\n\n  // Since start is found, we can report success here in validation mode\n  if (silent) { return true; }\n\n  // search end of block\n  nextLine = startLine;\n\n  for (;;) {\n    nextLine++;\n    if (nextLine >= endLine) {\n      // unclosed block should be autoclosed by end of document.\n      // also block seems to be autoclosed by end of parent\n      break;\n    }\n\n    pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n    max = state.eMarks[nextLine];\n\n    if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n      // non-empty line with negative indent should stop the list:\n      // - ```\n      //  test\n      break;\n    }\n\n    if (state.src.charCodeAt(pos) !== marker) { continue; }\n\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      // closing fence should be indented less than 4 spaces\n      continue;\n    }\n\n    pos = state.skipChars(pos, marker);\n\n    // closing code fence must be at least as long as the opening one\n    if (pos - mem < len) { continue; }\n\n    // make sure tail has spaces only\n    pos = state.skipSpaces(pos);\n\n    if (pos < max) { continue; }\n\n    haveEndMarker = true;\n    // found!\n    break;\n  }\n\n  // If a fence has heading spaces, they should be removed from its inner block\n  len = state.sCount[startLine];\n\n  state.line = nextLine + (haveEndMarker ? 1 : 0);\n\n  token         = state.push('fence', 'code', 0);\n  token.info    = params;\n  token.content = state.getLines(startLine + 1, nextLine, len, true);\n  token.markup  = markup;\n  token.map     = [ startLine, state.line ];\n\n  return true;\n};\n","// Block quotes\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function blockquote(state, startLine, endLine, silent) {\n  var adjustTab,\n      ch,\n      i,\n      initial,\n      l,\n      lastLineEmpty,\n      lines,\n      nextLine,\n      offset,\n      oldBMarks,\n      oldBSCount,\n      oldIndent,\n      oldParentType,\n      oldSCount,\n      oldTShift,\n      spaceAfterMarker,\n      terminate,\n      terminatorRules,\n      token,\n      wasOutdented,\n      oldLineMax = state.lineMax,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  // check the block quote marker\n  if (state.src.charCodeAt(pos++) !== 0x3E/* > */) { return false; }\n\n  // we know that it's going to be a valid blockquote,\n  // so no point trying to find the end of it in silent mode\n  if (silent) { return true; }\n\n  // skip spaces after \">\" and re-calculate offset\n  initial = offset = state.sCount[startLine] + pos - (state.bMarks[startLine] + state.tShift[startLine]);\n\n  // skip one optional space after '>'\n  if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n    // ' >   test '\n    //     ^ -- position start of line here:\n    pos++;\n    initial++;\n    offset++;\n    adjustTab = false;\n    spaceAfterMarker = true;\n  } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n    spaceAfterMarker = true;\n\n    if ((state.bsCount[startLine] + offset) % 4 === 3) {\n      // '  >\\t  test '\n      //       ^ -- position start of line here (tab has width===1)\n      pos++;\n      initial++;\n      offset++;\n      adjustTab = false;\n    } else {\n      // ' >\\t  test '\n      //    ^ -- position start of line here + shift bsCount slightly\n      //         to make extra space appear\n      adjustTab = true;\n    }\n  } else {\n    spaceAfterMarker = false;\n  }\n\n  oldBMarks = [ state.bMarks[startLine] ];\n  state.bMarks[startLine] = pos;\n\n  while (pos < max) {\n    ch = state.src.charCodeAt(pos);\n\n    if (isSpace(ch)) {\n      if (ch === 0x09) {\n        offset += 4 - (offset + state.bsCount[startLine] + (adjustTab ? 1 : 0)) % 4;\n      } else {\n        offset++;\n      }\n    } else {\n      break;\n    }\n\n    pos++;\n  }\n\n  oldBSCount = [ state.bsCount[startLine] ];\n  state.bsCount[startLine] = state.sCount[startLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n  lastLineEmpty = pos >= max;\n\n  oldSCount = [ state.sCount[startLine] ];\n  state.sCount[startLine] = offset - initial;\n\n  oldTShift = [ state.tShift[startLine] ];\n  state.tShift[startLine] = pos - state.bMarks[startLine];\n\n  terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n  oldParentType = state.parentType;\n  state.parentType = 'blockquote';\n  wasOutdented = false;\n\n  // Search the end of the block\n  //\n  // Block ends with either:\n  //  1. an empty line outside:\n  //     ```\n  //     > test\n  //\n  //     ```\n  //  2. an empty line inside:\n  //     ```\n  //     >\n  //     test\n  //     ```\n  //  3. another tag:\n  //     ```\n  //     > test\n  //      - - -\n  //     ```\n  for (nextLine = startLine + 1; nextLine < endLine; nextLine++) {\n    // check if it's outdented, i.e. it's inside list item and indented\n    // less than said list item:\n    //\n    // ```\n    // 1. anything\n    //    > current blockquote\n    // 2. checking this line\n    // ```\n    if (state.sCount[nextLine] < state.blkIndent) wasOutdented = true;\n\n    pos = state.bMarks[nextLine] + state.tShift[nextLine];\n    max = state.eMarks[nextLine];\n\n    if (pos >= max) {\n      // Case 1: line is not inside the blockquote, and this line is empty.\n      break;\n    }\n\n    if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !wasOutdented) {\n      // This line is inside the blockquote.\n\n      // skip spaces after \">\" and re-calculate offset\n      initial = offset = state.sCount[nextLine] + pos - (state.bMarks[nextLine] + state.tShift[nextLine]);\n\n      // skip one optional space after '>'\n      if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n        // ' >   test '\n        //     ^ -- position start of line here:\n        pos++;\n        initial++;\n        offset++;\n        adjustTab = false;\n        spaceAfterMarker = true;\n      } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n        spaceAfterMarker = true;\n\n        if ((state.bsCount[nextLine] + offset) % 4 === 3) {\n          // '  >\\t  test '\n          //       ^ -- position start of line here (tab has width===1)\n          pos++;\n          initial++;\n          offset++;\n          adjustTab = false;\n        } else {\n          // ' >\\t  test '\n          //    ^ -- position start of line here + shift bsCount slightly\n          //         to make extra space appear\n          adjustTab = true;\n        }\n      } else {\n        spaceAfterMarker = false;\n      }\n\n      oldBMarks.push(state.bMarks[nextLine]);\n      state.bMarks[nextLine] = pos;\n\n      while (pos < max) {\n        ch = state.src.charCodeAt(pos);\n\n        if (isSpace(ch)) {\n          if (ch === 0x09) {\n            offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n          } else {\n            offset++;\n          }\n        } else {\n          break;\n        }\n\n        pos++;\n      }\n\n      lastLineEmpty = pos >= max;\n\n      oldBSCount.push(state.bsCount[nextLine]);\n      state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n      oldSCount.push(state.sCount[nextLine]);\n      state.sCount[nextLine] = offset - initial;\n\n      oldTShift.push(state.tShift[nextLine]);\n      state.tShift[nextLine] = pos - state.bMarks[nextLine];\n      continue;\n    }\n\n    // Case 2: line is not inside the blockquote, and the last line was empty.\n    if (lastLineEmpty) { break; }\n\n    // Case 3: another tag found.\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n\n    if (terminate) {\n      // Quirk to enforce \"hard termination mode\" for paragraphs;\n      // normally if you call `tokenize(state, startLine, nextLine)`,\n      // paragraphs will look below nextLine for paragraph continuation,\n      // but if blockquote is terminated by another tag, they shouldn't\n      state.lineMax = nextLine;\n\n      if (state.blkIndent !== 0) {\n        // state.blkIndent was non-zero, we now set it to zero,\n        // so we need to re-calculate all offsets to appear as\n        // if indent wasn't changed\n        oldBMarks.push(state.bMarks[nextLine]);\n        oldBSCount.push(state.bsCount[nextLine]);\n        oldTShift.push(state.tShift[nextLine]);\n        oldSCount.push(state.sCount[nextLine]);\n        state.sCount[nextLine] -= state.blkIndent;\n      }\n\n      break;\n    }\n\n    oldBMarks.push(state.bMarks[nextLine]);\n    oldBSCount.push(state.bsCount[nextLine]);\n    oldTShift.push(state.tShift[nextLine]);\n    oldSCount.push(state.sCount[nextLine]);\n\n    // A negative indentation means that this is a paragraph continuation\n    //\n    state.sCount[nextLine] = -1;\n  }\n\n  oldIndent = state.blkIndent;\n  state.blkIndent = 0;\n\n  token        = state.push('blockquote_open', 'blockquote', 1);\n  token.markup = '>';\n  token.map    = lines = [ startLine, 0 ];\n\n  state.md.block.tokenize(state, startLine, nextLine);\n\n  token        = state.push('blockquote_close', 'blockquote', -1);\n  token.markup = '>';\n\n  state.lineMax = oldLineMax;\n  state.parentType = oldParentType;\n  lines[1] = state.line;\n\n  // Restore original tShift; this might not be necessary since the parser\n  // has already been here, but just to make sure we can do that.\n  for (i = 0; i < oldTShift.length; i++) {\n    state.bMarks[i + startLine] = oldBMarks[i];\n    state.tShift[i + startLine] = oldTShift[i];\n    state.sCount[i + startLine] = oldSCount[i];\n    state.bsCount[i + startLine] = oldBSCount[i];\n  }\n  state.blkIndent = oldIndent;\n\n  return true;\n};\n","// Horizontal rule\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function hr(state, startLine, endLine, silent) {\n  var marker, cnt, ch, token,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  marker = state.src.charCodeAt(pos++);\n\n  // Check hr marker\n  if (marker !== 0x2A/* * */ &&\n      marker !== 0x2D/* - */ &&\n      marker !== 0x5F/* _ */) {\n    return false;\n  }\n\n  // markers can be mixed with spaces, but there should be at least 3 of them\n\n  cnt = 1;\n  while (pos < max) {\n    ch = state.src.charCodeAt(pos++);\n    if (ch !== marker && !isSpace(ch)) { return false; }\n    if (ch === marker) { cnt++; }\n  }\n\n  if (cnt < 3) { return false; }\n\n  if (silent) { return true; }\n\n  state.line = startLine + 1;\n\n  token        = state.push('hr', 'hr', 0);\n  token.map    = [ startLine, state.line ];\n  token.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n\n  return true;\n};\n","// Lists\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker(state, startLine) {\n  var marker, pos, max, ch;\n\n  pos = state.bMarks[startLine] + state.tShift[startLine];\n  max = state.eMarks[startLine];\n\n  marker = state.src.charCodeAt(pos++);\n  // Check bullet\n  if (marker !== 0x2A/* * */ &&\n      marker !== 0x2D/* - */ &&\n      marker !== 0x2B/* + */) {\n    return -1;\n  }\n\n  if (pos < max) {\n    ch = state.src.charCodeAt(pos);\n\n    if (!isSpace(ch)) {\n      // \" -test \" - is not a list item\n      return -1;\n    }\n  }\n\n  return pos;\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker(state, startLine) {\n  var ch,\n      start = state.bMarks[startLine] + state.tShift[startLine],\n      pos = start,\n      max = state.eMarks[startLine];\n\n  // List marker should have at least 2 chars (digit + dot)\n  if (pos + 1 >= max) { return -1; }\n\n  ch = state.src.charCodeAt(pos++);\n\n  if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1; }\n\n  for (;;) {\n    // EOL -> fail\n    if (pos >= max) { return -1; }\n\n    ch = state.src.charCodeAt(pos++);\n\n    if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n\n      // List marker should have no more than 9 digits\n      // (prevents integer overflow in browsers)\n      if (pos - start >= 10) { return -1; }\n\n      continue;\n    }\n\n    // found valid marker\n    if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n      break;\n    }\n\n    return -1;\n  }\n\n\n  if (pos < max) {\n    ch = state.src.charCodeAt(pos);\n\n    if (!isSpace(ch)) {\n      // \" 1.test \" - is not a list item\n      return -1;\n    }\n  }\n  return pos;\n}\n\nfunction markTightParagraphs(state, idx) {\n  var i, l,\n      level = state.level + 2;\n\n  for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n    if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n      state.tokens[i + 2].hidden = true;\n      state.tokens[i].hidden = true;\n      i += 2;\n    }\n  }\n}\n\n\nmodule.exports = function list(state, startLine, endLine, silent) {\n  var ch,\n      contentStart,\n      i,\n      indent,\n      indentAfterMarker,\n      initial,\n      isOrdered,\n      itemLines,\n      l,\n      listLines,\n      listTokIdx,\n      markerCharCode,\n      markerValue,\n      max,\n      nextLine,\n      offset,\n      oldListIndent,\n      oldParentType,\n      oldSCount,\n      oldTShift,\n      oldTight,\n      pos,\n      posAfterMarker,\n      prevEmptyEnd,\n      start,\n      terminate,\n      terminatorRules,\n      token,\n      isTerminatingParagraph = false,\n      tight = true;\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  // Special case:\n  //  - item 1\n  //   - item 2\n  //    - item 3\n  //     - item 4\n  //      - this one is a paragraph continuation\n  if (state.listIndent >= 0 &&\n      state.sCount[startLine] - state.listIndent >= 4 &&\n      state.sCount[startLine] < state.blkIndent) {\n    return false;\n  }\n\n  // limit conditions when list can interrupt\n  // a paragraph (validation mode only)\n  if (silent && state.parentType === 'paragraph') {\n    // Next list item should still terminate previous list item;\n    //\n    // This code can fail if plugins use blkIndent as well as lists,\n    // but I hope the spec gets fixed long before that happens.\n    //\n    if (state.tShift[startLine] >= state.blkIndent) {\n      isTerminatingParagraph = true;\n    }\n  }\n\n  // Detect list type and position after marker\n  if ((posAfterMarker = skipOrderedListMarker(state, startLine)) >= 0) {\n    isOrdered = true;\n    start = state.bMarks[startLine] + state.tShift[startLine];\n    markerValue = Number(state.src.substr(start, posAfterMarker - start - 1));\n\n    // If we're starting a new ordered list right after\n    // a paragraph, it should start with 1.\n    if (isTerminatingParagraph && markerValue !== 1) return false;\n\n  } else if ((posAfterMarker = skipBulletListMarker(state, startLine)) >= 0) {\n    isOrdered = false;\n\n  } else {\n    return false;\n  }\n\n  // If we're starting a new unordered list right after\n  // a paragraph, first line should not be empty.\n  if (isTerminatingParagraph) {\n    if (state.skipSpaces(posAfterMarker) >= state.eMarks[startLine]) return false;\n  }\n\n  // We should terminate list on style change. Remember first one to compare.\n  markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n\n  // For validation mode we can terminate immediately\n  if (silent) { return true; }\n\n  // Start list\n  listTokIdx = state.tokens.length;\n\n  if (isOrdered) {\n    token       = state.push('ordered_list_open', 'ol', 1);\n    if (markerValue !== 1) {\n      token.attrs = [ [ 'start', markerValue ] ];\n    }\n\n  } else {\n    token       = state.push('bullet_list_open', 'ul', 1);\n  }\n\n  token.map    = listLines = [ startLine, 0 ];\n  token.markup = String.fromCharCode(markerCharCode);\n\n  //\n  // Iterate list items\n  //\n\n  nextLine = startLine;\n  prevEmptyEnd = false;\n  terminatorRules = state.md.block.ruler.getRules('list');\n\n  oldParentType = state.parentType;\n  state.parentType = 'list';\n\n  while (nextLine < endLine) {\n    pos = posAfterMarker;\n    max = state.eMarks[nextLine];\n\n    initial = offset = state.sCount[nextLine] + posAfterMarker - (state.bMarks[startLine] + state.tShift[startLine]);\n\n    while (pos < max) {\n      ch = state.src.charCodeAt(pos);\n\n      if (ch === 0x09) {\n        offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n      } else if (ch === 0x20) {\n        offset++;\n      } else {\n        break;\n      }\n\n      pos++;\n    }\n\n    contentStart = pos;\n\n    if (contentStart >= max) {\n      // trimming space in \"-    \\n  3\" case, indent is 1 here\n      indentAfterMarker = 1;\n    } else {\n      indentAfterMarker = offset - initial;\n    }\n\n    // If we have more than 4 spaces, the indent is 1\n    // (the rest is just indented code block)\n    if (indentAfterMarker > 4) { indentAfterMarker = 1; }\n\n    // \"  -  test\"\n    //  ^^^^^ - calculating total length of this thing\n    indent = initial + indentAfterMarker;\n\n    // Run subparser & write tokens\n    token        = state.push('list_item_open', 'li', 1);\n    token.markup = String.fromCharCode(markerCharCode);\n    token.map    = itemLines = [ startLine, 0 ];\n\n    // change current state, then restore it after parser subcall\n    oldTight = state.tight;\n    oldTShift = state.tShift[startLine];\n    oldSCount = state.sCount[startLine];\n\n    //  - example list\n    // ^ listIndent position will be here\n    //   ^ blkIndent position will be here\n    //\n    oldListIndent = state.listIndent;\n    state.listIndent = state.blkIndent;\n    state.blkIndent = indent;\n\n    state.tight = true;\n    state.tShift[startLine] = contentStart - state.bMarks[startLine];\n    state.sCount[startLine] = offset;\n\n    if (contentStart >= max && state.isEmpty(startLine + 1)) {\n      // workaround for this case\n      // (list item is empty, list terminates before \"foo\"):\n      // ~~~~~~~~\n      //   -\n      //\n      //     foo\n      // ~~~~~~~~\n      state.line = Math.min(state.line + 2, endLine);\n    } else {\n      state.md.block.tokenize(state, startLine, endLine, true);\n    }\n\n    // If any of list item is tight, mark list as tight\n    if (!state.tight || prevEmptyEnd) {\n      tight = false;\n    }\n    // Item become loose if finish with empty line,\n    // but we should filter last element, because it means list finish\n    prevEmptyEnd = (state.line - startLine) > 1 && state.isEmpty(state.line - 1);\n\n    state.blkIndent = state.listIndent;\n    state.listIndent = oldListIndent;\n    state.tShift[startLine] = oldTShift;\n    state.sCount[startLine] = oldSCount;\n    state.tight = oldTight;\n\n    token        = state.push('list_item_close', 'li', -1);\n    token.markup = String.fromCharCode(markerCharCode);\n\n    nextLine = startLine = state.line;\n    itemLines[1] = nextLine;\n    contentStart = state.bMarks[startLine];\n\n    if (nextLine >= endLine) { break; }\n\n    //\n    // Try to check if list is terminated or continued.\n    //\n    if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n    // if it's indented more than 3 spaces, it should be a code block\n    if (state.sCount[startLine] - state.blkIndent >= 4) { break; }\n\n    // fail if terminating block found\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) { break; }\n\n    // fail if list has another type\n    if (isOrdered) {\n      posAfterMarker = skipOrderedListMarker(state, nextLine);\n      if (posAfterMarker < 0) { break; }\n    } else {\n      posAfterMarker = skipBulletListMarker(state, nextLine);\n      if (posAfterMarker < 0) { break; }\n    }\n\n    if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break; }\n  }\n\n  // Finalize list\n  if (isOrdered) {\n    token = state.push('ordered_list_close', 'ol', -1);\n  } else {\n    token = state.push('bullet_list_close', 'ul', -1);\n  }\n  token.markup = String.fromCharCode(markerCharCode);\n\n  listLines[1] = nextLine;\n  state.line = nextLine;\n\n  state.parentType = oldParentType;\n\n  // mark paragraphs tight if needed\n  if (tight) {\n    markTightParagraphs(state, listTokIdx);\n  }\n\n  return true;\n};\n","'use strict';\n\n\nvar normalizeReference   = require('../common/utils').normalizeReference;\nvar isSpace              = require('../common/utils').isSpace;\n\n\nmodule.exports = function reference(state, startLine, _endLine, silent) {\n  var ch,\n      destEndPos,\n      destEndLineNo,\n      endLine,\n      href,\n      i,\n      l,\n      label,\n      labelEnd,\n      oldParentType,\n      res,\n      start,\n      str,\n      terminate,\n      terminatorRules,\n      title,\n      lines = 0,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine],\n      nextLine = startLine + 1;\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false; }\n\n  // Simple check to quickly interrupt scan on [link](url) at the start of line.\n  // Can be useful on practice: https://github.com/markdown-it/markdown-it/issues/54\n  while (++pos < max) {\n    if (state.src.charCodeAt(pos) === 0x5D /* ] */ &&\n        state.src.charCodeAt(pos - 1) !== 0x5C/* \\ */) {\n      if (pos + 1 === max) { return false; }\n      if (state.src.charCodeAt(pos + 1) !== 0x3A/* : */) { return false; }\n      break;\n    }\n  }\n\n  endLine = state.lineMax;\n\n  // jump line-by-line until empty one or EOF\n  terminatorRules = state.md.block.ruler.getRules('reference');\n\n  oldParentType = state.parentType;\n  state.parentType = 'reference';\n\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) { continue; }\n\n    // Some tags can terminate paragraph without empty line.\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) { break; }\n  }\n\n  str = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n  max = str.length;\n\n  for (pos = 1; pos < max; pos++) {\n    ch = str.charCodeAt(pos);\n    if (ch === 0x5B /* [ */) {\n      return false;\n    } else if (ch === 0x5D /* ] */) {\n      labelEnd = pos;\n      break;\n    } else if (ch === 0x0A /* \\n */) {\n      lines++;\n    } else if (ch === 0x5C /* \\ */) {\n      pos++;\n      if (pos < max && str.charCodeAt(pos) === 0x0A) {\n        lines++;\n      }\n    }\n  }\n\n  if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false; }\n\n  // [label]:   destination   'title'\n  //         ^^^ skip optional whitespace here\n  for (pos = labelEnd + 2; pos < max; pos++) {\n    ch = str.charCodeAt(pos);\n    if (ch === 0x0A) {\n      lines++;\n    } else if (isSpace(ch)) {\n      /*eslint no-empty:0*/\n    } else {\n      break;\n    }\n  }\n\n  // [label]:   destination   'title'\n  //            ^^^^^^^^^^^ parse this\n  res = state.md.helpers.parseLinkDestination(str, pos, max);\n  if (!res.ok) { return false; }\n\n  href = state.md.normalizeLink(res.str);\n  if (!state.md.validateLink(href)) { return false; }\n\n  pos = res.pos;\n  lines += res.lines;\n\n  // save cursor state, we could require to rollback later\n  destEndPos = pos;\n  destEndLineNo = lines;\n\n  // [label]:   destination   'title'\n  //                       ^^^ skipping those spaces\n  start = pos;\n  for (; pos < max; pos++) {\n    ch = str.charCodeAt(pos);\n    if (ch === 0x0A) {\n      lines++;\n    } else if (isSpace(ch)) {\n      /*eslint no-empty:0*/\n    } else {\n      break;\n    }\n  }\n\n  // [label]:   destination   'title'\n  //                          ^^^^^^^ parse this\n  res = state.md.helpers.parseLinkTitle(str, pos, max);\n  if (pos < max && start !== pos && res.ok) {\n    title = res.str;\n    pos = res.pos;\n    lines += res.lines;\n  } else {\n    title = '';\n    pos = destEndPos;\n    lines = destEndLineNo;\n  }\n\n  // skip trailing spaces until the rest of the line\n  while (pos < max) {\n    ch = str.charCodeAt(pos);\n    if (!isSpace(ch)) { break; }\n    pos++;\n  }\n\n  if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n    if (title) {\n      // garbage at the end of the line after title,\n      // but it could still be a valid reference if we roll back\n      title = '';\n      pos = destEndPos;\n      lines = destEndLineNo;\n      while (pos < max) {\n        ch = str.charCodeAt(pos);\n        if (!isSpace(ch)) { break; }\n        pos++;\n      }\n    }\n  }\n\n  if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n    // garbage at the end of the line\n    return false;\n  }\n\n  label = normalizeReference(str.slice(1, labelEnd));\n  if (!label) {\n    // CommonMark 0.20 disallows empty labels\n    return false;\n  }\n\n  // Reference can not terminate anything. This check is for safety only.\n  /*istanbul ignore if*/\n  if (silent) { return true; }\n\n  if (typeof state.env.references === 'undefined') {\n    state.env.references = {};\n  }\n  if (typeof state.env.references[label] === 'undefined') {\n    state.env.references[label] = { title: title, href: href };\n  }\n\n  state.parentType = oldParentType;\n\n  state.line = startLine + lines + 1;\n  return true;\n};\n","// heading (#, ##, ...)\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function heading(state, startLine, endLine, silent) {\n  var ch, level, tmp, token,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  ch  = state.src.charCodeAt(pos);\n\n  if (ch !== 0x23/* # */ || pos >= max) { return false; }\n\n  // count heading level\n  level = 1;\n  ch = state.src.charCodeAt(++pos);\n  while (ch === 0x23/* # */ && pos < max && level <= 6) {\n    level++;\n    ch = state.src.charCodeAt(++pos);\n  }\n\n  if (level > 6 || (pos < max && !isSpace(ch))) { return false; }\n\n  if (silent) { return true; }\n\n  // Let's cut tails like '    ###  ' from the end of string\n\n  max = state.skipSpacesBack(max, pos);\n  tmp = state.skipCharsBack(max, 0x23, pos); // #\n  if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n    max = tmp;\n  }\n\n  state.line = startLine + 1;\n\n  token        = state.push('heading_open', 'h' + String(level), 1);\n  token.markup = '########'.slice(0, level);\n  token.map    = [ startLine, state.line ];\n\n  token          = state.push('inline', '', 0);\n  token.content  = state.src.slice(pos, max).trim();\n  token.map      = [ startLine, state.line ];\n  token.children = [];\n\n  token        = state.push('heading_close', 'h' + String(level), -1);\n  token.markup = '########'.slice(0, level);\n\n  return true;\n};\n","// lheading (---, ===)\n\n'use strict';\n\n\nmodule.exports = function lheading(state, startLine, endLine/*, silent*/) {\n  var content, terminate, i, l, token, pos, max, level, marker,\n      nextLine = startLine + 1, oldParentType,\n      terminatorRules = state.md.block.ruler.getRules('paragraph');\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  oldParentType = state.parentType;\n  state.parentType = 'paragraph'; // use paragraph to match terminatorRules\n\n  // jump line-by-line until empty one or EOF\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n    //\n    // Check for underline in setext header\n    //\n    if (state.sCount[nextLine] >= state.blkIndent) {\n      pos = state.bMarks[nextLine] + state.tShift[nextLine];\n      max = state.eMarks[nextLine];\n\n      if (pos < max) {\n        marker = state.src.charCodeAt(pos);\n\n        if (marker === 0x2D/* - */ || marker === 0x3D/* = */) {\n          pos = state.skipChars(pos, marker);\n          pos = state.skipSpaces(pos);\n\n          if (pos >= max) {\n            level = (marker === 0x3D/* = */ ? 1 : 2);\n            break;\n          }\n        }\n      }\n    }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) { continue; }\n\n    // Some tags can terminate paragraph without empty line.\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) { break; }\n  }\n\n  if (!level) {\n    // Didn't find valid underline\n    return false;\n  }\n\n  content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n  state.line = nextLine + 1;\n\n  token          = state.push('heading_open', 'h' + String(level), 1);\n  token.markup   = String.fromCharCode(marker);\n  token.map      = [ startLine, state.line ];\n\n  token          = state.push('inline', '', 0);\n  token.content  = content;\n  token.map      = [ startLine, state.line - 1 ];\n  token.children = [];\n\n  token          = state.push('heading_close', 'h' + String(level), -1);\n  token.markup   = String.fromCharCode(marker);\n\n  state.parentType = oldParentType;\n\n  return true;\n};\n","// HTML block\n\n'use strict';\n\n\nvar block_names = require('../common/html_blocks');\nvar HTML_OPEN_CLOSE_TAG_RE = require('../common/html_re').HTML_OPEN_CLOSE_TAG_RE;\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nvar HTML_SEQUENCES = [\n  [ /^<(script|pre|style)(?=(\\s|>|$))/i, /<\\/(script|pre|style)>/i, true ],\n  [ /^<!--/,        /-->/,   true ],\n  [ /^<\\?/,         /\\?>/,   true ],\n  [ /^<![A-Z]/,     />/,     true ],\n  [ /^<!\\[CDATA\\[/, /\\]\\]>/, true ],\n  [ new RegExp('^</?(' + block_names.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true ],\n  [ new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'),  /^$/, false ]\n];\n\n\nmodule.exports = function html_block(state, startLine, endLine, silent) {\n  var i, nextLine, token, lineText,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  if (!state.md.options.html) { return false; }\n\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n  lineText = state.src.slice(pos, max);\n\n  for (i = 0; i < HTML_SEQUENCES.length; i++) {\n    if (HTML_SEQUENCES[i][0].test(lineText)) { break; }\n  }\n\n  if (i === HTML_SEQUENCES.length) { return false; }\n\n  if (silent) {\n    // true if this sequence can be a terminator, false otherwise\n    return HTML_SEQUENCES[i][2];\n  }\n\n  nextLine = startLine + 1;\n\n  // If we are here - we detected HTML block.\n  // Let's roll down till block end.\n  if (!HTML_SEQUENCES[i][1].test(lineText)) {\n    for (; nextLine < endLine; nextLine++) {\n      if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n      pos = state.bMarks[nextLine] + state.tShift[nextLine];\n      max = state.eMarks[nextLine];\n      lineText = state.src.slice(pos, max);\n\n      if (HTML_SEQUENCES[i][1].test(lineText)) {\n        if (lineText.length !== 0) { nextLine++; }\n        break;\n      }\n    }\n  }\n\n  state.line = nextLine;\n\n  token         = state.push('html_block', '', 0);\n  token.map     = [ startLine, nextLine ];\n  token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n\n  return true;\n};\n","// List of valid html blocks names, accorting to commonmark spec\n// http://jgm.github.io/CommonMark/spec.html#html-blocks\n\n'use strict';\n\n\nmodule.exports = [\n  'address',\n  'article',\n  'aside',\n  'base',\n  'basefont',\n  'blockquote',\n  'body',\n  'caption',\n  'center',\n  'col',\n  'colgroup',\n  'dd',\n  'details',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'frame',\n  'frameset',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hr',\n  'html',\n  'iframe',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'menu',\n  'menuitem',\n  'meta',\n  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'section',\n  'source',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n];\n","// Paragraph\n\n'use strict';\n\n\nmodule.exports = function paragraph(state, startLine/*, endLine*/) {\n  var content, terminate, i, l, token, oldParentType,\n      nextLine = startLine + 1,\n      terminatorRules = state.md.block.ruler.getRules('paragraph'),\n      endLine = state.lineMax;\n\n  oldParentType = state.parentType;\n  state.parentType = 'paragraph';\n\n  // jump line-by-line until empty one or EOF\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) { continue; }\n\n    // Some tags can terminate paragraph without empty line.\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) { break; }\n  }\n\n  content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n  state.line = nextLine;\n\n  token          = state.push('paragraph_open', 'p', 1);\n  token.map      = [ startLine, state.line ];\n\n  token          = state.push('inline', '', 0);\n  token.content  = content;\n  token.map      = [ startLine, state.line ];\n  token.children = [];\n\n  token          = state.push('paragraph_close', 'p', -1);\n\n  state.parentType = oldParentType;\n\n  return true;\n};\n","// Parser state class\n\n'use strict';\n\nvar Token = require('../token');\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction StateBlock(src, md, env, tokens) {\n  var ch, s, start, pos, len, indent, offset, indent_found;\n\n  this.src = src;\n\n  // link to parser instance\n  this.md     = md;\n\n  this.env = env;\n\n  //\n  // Internal state vartiables\n  //\n\n  this.tokens = tokens;\n\n  this.bMarks = [];  // line begin offsets for fast jumps\n  this.eMarks = [];  // line end offsets for fast jumps\n  this.tShift = [];  // offsets of the first non-space characters (tabs not expanded)\n  this.sCount = [];  // indents for each line (tabs expanded)\n\n  // An amount of virtual spaces (tabs expanded) between beginning\n  // of each line (bMarks) and real beginning of that line.\n  //\n  // It exists only as a hack because blockquotes override bMarks\n  // losing information in the process.\n  //\n  // It's used only when expanding tabs, you can think about it as\n  // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n  // means first tab should be expanded to 4-21%4 === 3 spaces.\n  //\n  this.bsCount = [];\n\n  // block parser variables\n  this.blkIndent  = 0; // required block content indent (for example, if we are\n                       // inside a list, it would be positioned after list marker)\n  this.line       = 0; // line index in src\n  this.lineMax    = 0; // lines count\n  this.tight      = false;  // loose/tight mode for lists\n  this.ddIndent   = -1; // indent of the current dd block (-1 if there isn't any)\n  this.listIndent = -1; // indent of the current list block (-1 if there isn't any)\n\n  // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n  // used in lists to determine if they interrupt a paragraph\n  this.parentType = 'root';\n\n  this.level = 0;\n\n  // renderer\n  this.result = '';\n\n  // Create caches\n  // Generate markers.\n  s = this.src;\n  indent_found = false;\n\n  for (start = pos = indent = offset = 0, len = s.length; pos < len; pos++) {\n    ch = s.charCodeAt(pos);\n\n    if (!indent_found) {\n      if (isSpace(ch)) {\n        indent++;\n\n        if (ch === 0x09) {\n          offset += 4 - offset % 4;\n        } else {\n          offset++;\n        }\n        continue;\n      } else {\n        indent_found = true;\n      }\n    }\n\n    if (ch === 0x0A || pos === len - 1) {\n      if (ch !== 0x0A) { pos++; }\n      this.bMarks.push(start);\n      this.eMarks.push(pos);\n      this.tShift.push(indent);\n      this.sCount.push(offset);\n      this.bsCount.push(0);\n\n      indent_found = false;\n      indent = 0;\n      offset = 0;\n      start = pos + 1;\n    }\n  }\n\n  // Push fake entry to simplify cache bounds checks\n  this.bMarks.push(s.length);\n  this.eMarks.push(s.length);\n  this.tShift.push(0);\n  this.sCount.push(0);\n  this.bsCount.push(0);\n\n  this.lineMax = this.bMarks.length - 1; // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n  var token = new Token(type, tag, nesting);\n  token.block = true;\n\n  if (nesting < 0) this.level--; // closing tag\n  token.level = this.level;\n  if (nesting > 0) this.level++; // opening tag\n\n  this.tokens.push(token);\n  return token;\n};\n\nStateBlock.prototype.isEmpty = function isEmpty(line) {\n  return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n};\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {\n  for (var max = this.lineMax; from < max; from++) {\n    if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n      break;\n    }\n  }\n  return from;\n};\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces(pos) {\n  var ch;\n\n  for (var max = this.src.length; pos < max; pos++) {\n    ch = this.src.charCodeAt(pos);\n    if (!isSpace(ch)) { break; }\n  }\n  return pos;\n};\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {\n  if (pos <= min) { return pos; }\n\n  while (pos > min) {\n    if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1; }\n  }\n  return pos;\n};\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars(pos, code) {\n  for (var max = this.src.length; pos < max; pos++) {\n    if (this.src.charCodeAt(pos) !== code) { break; }\n  }\n  return pos;\n};\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {\n  if (pos <= min) { return pos; }\n\n  while (pos > min) {\n    if (code !== this.src.charCodeAt(--pos)) { return pos + 1; }\n  }\n  return pos;\n};\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {\n  var i, lineIndent, ch, first, last, queue, lineStart,\n      line = begin;\n\n  if (begin >= end) {\n    return '';\n  }\n\n  queue = new Array(end - begin);\n\n  for (i = 0; line < end; line++, i++) {\n    lineIndent = 0;\n    lineStart = first = this.bMarks[line];\n\n    if (line + 1 < end || keepLastLF) {\n      // No need for bounds check because we have fake entry on tail.\n      last = this.eMarks[line] + 1;\n    } else {\n      last = this.eMarks[line];\n    }\n\n    while (first < last && lineIndent < indent) {\n      ch = this.src.charCodeAt(first);\n\n      if (isSpace(ch)) {\n        if (ch === 0x09) {\n          lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n        } else {\n          lineIndent++;\n        }\n      } else if (first - lineStart < this.tShift[line]) {\n        // patched tShift masked characters to look like spaces (blockquotes, list markers)\n        lineIndent++;\n      } else {\n        break;\n      }\n\n      first++;\n    }\n\n    if (lineIndent > indent) {\n      // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n      // with indent=2 becomes '  \\tfoobar'\n      queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last);\n    } else {\n      queue[i] = this.src.slice(first, last);\n    }\n  }\n\n  return queue.join('');\n};\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token;\n\n\nmodule.exports = StateBlock;\n","/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n'use strict';\n\n\nvar Ruler           = require('./ruler');\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Parser rules\n\nvar _rules = [\n  [ 'text',            require('./rules_inline/text') ],\n  [ 'newline',         require('./rules_inline/newline') ],\n  [ 'escape',          require('./rules_inline/escape') ],\n  [ 'backticks',       require('./rules_inline/backticks') ],\n  [ 'strikethrough',   require('./rules_inline/strikethrough').tokenize ],\n  [ 'emphasis',        require('./rules_inline/emphasis').tokenize ],\n  [ 'link',            require('./rules_inline/link') ],\n  [ 'image',           require('./rules_inline/image') ],\n  [ 'autolink',        require('./rules_inline/autolink') ],\n  [ 'html_inline',     require('./rules_inline/html_inline') ],\n  [ 'entity',          require('./rules_inline/entity') ]\n];\n\nvar _rules2 = [\n  [ 'balance_pairs',   require('./rules_inline/balance_pairs') ],\n  [ 'strikethrough',   require('./rules_inline/strikethrough').postProcess ],\n  [ 'emphasis',        require('./rules_inline/emphasis').postProcess ],\n  [ 'text_collapse',   require('./rules_inline/text_collapse') ]\n];\n\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline() {\n  var i;\n\n  /**\n   * ParserInline#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of inline rules.\n   **/\n  this.ruler = new Ruler();\n\n  for (i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1]);\n  }\n\n  /**\n   * ParserInline#ruler2 -> Ruler\n   *\n   * [[Ruler]] instance. Second ruler used for post-processing\n   * (e.g. in emphasis-like rules).\n   **/\n  this.ruler2 = new Ruler();\n\n  for (i = 0; i < _rules2.length; i++) {\n    this.ruler2.push(_rules2[i][0], _rules2[i][1]);\n  }\n}\n\n\n// Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\nParserInline.prototype.skipToken = function (state) {\n  var ok, i, pos = state.pos,\n      rules = this.ruler.getRules(''),\n      len = rules.length,\n      maxNesting = state.md.options.maxNesting,\n      cache = state.cache;\n\n\n  if (typeof cache[pos] !== 'undefined') {\n    state.pos = cache[pos];\n    return;\n  }\n\n  if (state.level < maxNesting) {\n    for (i = 0; i < len; i++) {\n      // Increment state.level and decrement it later to limit recursion.\n      // It's harmless to do here, because no tokens are created. But ideally,\n      // we'd need a separate private state variable for this purpose.\n      //\n      state.level++;\n      ok = rules[i](state, true);\n      state.level--;\n\n      if (ok) { break; }\n    }\n  } else {\n    // Too much nesting, just skip until the end of the paragraph.\n    //\n    // NOTE: this will cause links to behave incorrectly in the following case,\n    //       when an amount of `[` is exactly equal to `maxNesting + 1`:\n    //\n    //       [[[[[[[[[[[[[[[[[[[[[foo]()\n    //\n    // TODO: remove this workaround when CM standard will allow nested links\n    //       (we can replace it by preventing links from being parsed in\n    //       validation mode)\n    //\n    state.pos = state.posMax;\n  }\n\n  if (!ok) { state.pos++; }\n  cache[pos] = state.pos;\n};\n\n\n// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n  var ok, i,\n      rules = this.ruler.getRules(''),\n      len = rules.length,\n      end = state.posMax,\n      maxNesting = state.md.options.maxNesting;\n\n  while (state.pos < end) {\n    // Try all possible rules.\n    // On success, rule should:\n    //\n    // - update `state.pos`\n    // - update `state.tokens`\n    // - return true\n\n    if (state.level < maxNesting) {\n      for (i = 0; i < len; i++) {\n        ok = rules[i](state, false);\n        if (ok) { break; }\n      }\n    }\n\n    if (ok) {\n      if (state.pos >= end) { break; }\n      continue;\n    }\n\n    state.pending += state.src[state.pos++];\n  }\n\n  if (state.pending) {\n    state.pushPending();\n  }\n};\n\n\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n  var i, rules, len;\n  var state = new this.State(str, md, env, outTokens);\n\n  this.tokenize(state);\n\n  rules = this.ruler2.getRules('');\n  len = rules.length;\n\n  for (i = 0; i < len; i++) {\n    rules[i](state);\n  }\n};\n\n\nParserInline.prototype.State = require('./rules_inline/state_inline');\n\n\nmodule.exports = ParserInline;\n","// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n'use strict';\n\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar(ch) {\n  switch (ch) {\n    case 0x0A/* \\n */:\n    case 0x21/* ! */:\n    case 0x23/* # */:\n    case 0x24/* $ */:\n    case 0x25/* % */:\n    case 0x26/* & */:\n    case 0x2A/* * */:\n    case 0x2B/* + */:\n    case 0x2D/* - */:\n    case 0x3A/* : */:\n    case 0x3C/* < */:\n    case 0x3D/* = */:\n    case 0x3E/* > */:\n    case 0x40/* @ */:\n    case 0x5B/* [ */:\n    case 0x5C/* \\ */:\n    case 0x5D/* ] */:\n    case 0x5E/* ^ */:\n    case 0x5F/* _ */:\n    case 0x60/* ` */:\n    case 0x7B/* { */:\n    case 0x7D/* } */:\n    case 0x7E/* ~ */:\n      return true;\n    default:\n      return false;\n  }\n}\n\nmodule.exports = function text(state, silent) {\n  var pos = state.pos;\n\n  while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n    pos++;\n  }\n\n  if (pos === state.pos) { return false; }\n\n  if (!silent) { state.pending += state.src.slice(state.pos, pos); }\n\n  state.pos = pos;\n\n  return true;\n};\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParcerInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n  var pos = state.pos,\n      idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n  // first char is terminator -> empty text\n  if (idx === 0) { return false; }\n\n  // no terminator -> text till end of string\n  if (idx < 0) {\n    if (!silent) { state.pending += state.src.slice(pos); }\n    state.pos = state.src.length;\n    return true;\n  }\n\n  if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n  state.pos += idx;\n\n  return true;\n};*/\n","// Proceess '\\n'\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function newline(state, silent) {\n  var pmax, max, pos = state.pos;\n\n  if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false; }\n\n  pmax = state.pending.length - 1;\n  max = state.posMax;\n\n  // '  \\n' -> hardbreak\n  // Lookup in pending chars is bad practice! Don't copy to other rules!\n  // Pending string is stored in concat mode, indexed lookups will cause\n  // convertion to flat mode.\n  if (!silent) {\n    if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n      if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n        state.pending = state.pending.replace(/ +$/, '');\n        state.push('hardbreak', 'br', 0);\n      } else {\n        state.pending = state.pending.slice(0, -1);\n        state.push('softbreak', 'br', 0);\n      }\n\n    } else {\n      state.push('softbreak', 'br', 0);\n    }\n  }\n\n  pos++;\n\n  // skip heading spaces for next line\n  while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++; }\n\n  state.pos = pos;\n  return true;\n};\n","// Process escaped chars and hardbreaks\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nvar ESCAPED = [];\n\nfor (var i = 0; i < 256; i++) { ESCAPED.push(0); }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n  .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1; });\n\n\nmodule.exports = function escape(state, silent) {\n  var ch, pos = state.pos, max = state.posMax;\n\n  if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) { return false; }\n\n  pos++;\n\n  if (pos < max) {\n    ch = state.src.charCodeAt(pos);\n\n    if (ch < 256 && ESCAPED[ch] !== 0) {\n      if (!silent) { state.pending += state.src[pos]; }\n      state.pos += 2;\n      return true;\n    }\n\n    if (ch === 0x0A) {\n      if (!silent) {\n        state.push('hardbreak', 'br', 0);\n      }\n\n      pos++;\n      // skip leading whitespaces from next line\n      while (pos < max) {\n        ch = state.src.charCodeAt(pos);\n        if (!isSpace(ch)) { break; }\n        pos++;\n      }\n\n      state.pos = pos;\n      return true;\n    }\n  }\n\n  if (!silent) { state.pending += '\\\\'; }\n  state.pos++;\n  return true;\n};\n","// Parse backticks\n\n'use strict';\n\nmodule.exports = function backtick(state, silent) {\n  var start, max, marker, matchStart, matchEnd, token,\n      pos = state.pos,\n      ch = state.src.charCodeAt(pos);\n\n  if (ch !== 0x60/* ` */) { return false; }\n\n  start = pos;\n  pos++;\n  max = state.posMax;\n\n  while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++; }\n\n  marker = state.src.slice(start, pos);\n\n  matchStart = matchEnd = pos;\n\n  while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n    matchEnd = matchStart + 1;\n\n    while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++; }\n\n    if (matchEnd - matchStart === marker.length) {\n      if (!silent) {\n        token         = state.push('code_inline', 'code', 0);\n        token.markup  = marker;\n        token.content = state.src.slice(pos, matchStart)\n          .replace(/\\n/g, ' ')\n          .replace(/^ (.+) $/, '$1');\n      }\n      state.pos = matchEnd;\n      return true;\n    }\n  }\n\n  if (!silent) { state.pending += marker; }\n  state.pos += marker.length;\n  return true;\n};\n","// Process [link](<to> \"stuff\")\n\n'use strict';\n\nvar normalizeReference   = require('../common/utils').normalizeReference;\nvar isSpace              = require('../common/utils').isSpace;\n\n\nmodule.exports = function link(state, silent) {\n  var attrs,\n      code,\n      label,\n      labelEnd,\n      labelStart,\n      pos,\n      res,\n      ref,\n      title,\n      token,\n      href = '',\n      oldPos = state.pos,\n      max = state.posMax,\n      start = state.pos,\n      parseReference = true;\n\n  if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false; }\n\n  labelStart = state.pos + 1;\n  labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);\n\n  // parser failed to find ']', so it's not a valid link\n  if (labelEnd < 0) { return false; }\n\n  pos = labelEnd + 1;\n  if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n    //\n    // Inline link\n    //\n\n    // might have found a valid shortcut link, disable reference parsing\n    parseReference = false;\n\n    // [link](  <href>  \"title\"  )\n    //        ^^ skipping these spaces\n    pos++;\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos);\n      if (!isSpace(code) && code !== 0x0A) { break; }\n    }\n    if (pos >= max) { return false; }\n\n    // [link](  <href>  \"title\"  )\n    //          ^^^^^^ parsing link destination\n    start = pos;\n    res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n    if (res.ok) {\n      href = state.md.normalizeLink(res.str);\n      if (state.md.validateLink(href)) {\n        pos = res.pos;\n      } else {\n        href = '';\n      }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                ^^ skipping these spaces\n    start = pos;\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos);\n      if (!isSpace(code) && code !== 0x0A) { break; }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                  ^^^^^^^ parsing link title\n    res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n    if (pos < max && start !== pos && res.ok) {\n      title = res.str;\n      pos = res.pos;\n\n      // [link](  <href>  \"title\"  )\n      //                         ^^ skipping these spaces\n      for (; pos < max; pos++) {\n        code = state.src.charCodeAt(pos);\n        if (!isSpace(code) && code !== 0x0A) { break; }\n      }\n    } else {\n      title = '';\n    }\n\n    if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n      // parsing a valid shortcut link failed, fallback to reference\n      parseReference = true;\n    }\n    pos++;\n  }\n\n  if (parseReference) {\n    //\n    // Link reference\n    //\n    if (typeof state.env.references === 'undefined') { return false; }\n\n    if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n      start = pos + 1;\n      pos = state.md.helpers.parseLinkLabel(state, pos);\n      if (pos >= 0) {\n        label = state.src.slice(start, pos++);\n      } else {\n        pos = labelEnd + 1;\n      }\n    } else {\n      pos = labelEnd + 1;\n    }\n\n    // covers label === '' and label === undefined\n    // (collapsed reference link and shortcut reference link respectively)\n    if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n    ref = state.env.references[normalizeReference(label)];\n    if (!ref) {\n      state.pos = oldPos;\n      return false;\n    }\n    href = ref.href;\n    title = ref.title;\n  }\n\n  //\n  // We found the end of the link, and know for a fact it's a valid link;\n  // so all that's left to do is to call tokenizer.\n  //\n  if (!silent) {\n    state.pos = labelStart;\n    state.posMax = labelEnd;\n\n    token        = state.push('link_open', 'a', 1);\n    token.attrs  = attrs = [ [ 'href', href ] ];\n    if (title) {\n      attrs.push([ 'title', title ]);\n    }\n\n    state.md.inline.tokenize(state);\n\n    token        = state.push('link_close', 'a', -1);\n  }\n\n  state.pos = pos;\n  state.posMax = max;\n  return true;\n};\n","// Process ![image](<src> \"title\")\n\n'use strict';\n\nvar normalizeReference   = require('../common/utils').normalizeReference;\nvar isSpace              = require('../common/utils').isSpace;\n\n\nmodule.exports = function image(state, silent) {\n  var attrs,\n      code,\n      content,\n      label,\n      labelEnd,\n      labelStart,\n      pos,\n      ref,\n      res,\n      title,\n      token,\n      tokens,\n      start,\n      href = '',\n      oldPos = state.pos,\n      max = state.posMax;\n\n  if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false; }\n  if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false; }\n\n  labelStart = state.pos + 2;\n  labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);\n\n  // parser failed to find ']', so it's not a valid link\n  if (labelEnd < 0) { return false; }\n\n  pos = labelEnd + 1;\n  if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n    //\n    // Inline link\n    //\n\n    // [link](  <href>  \"title\"  )\n    //        ^^ skipping these spaces\n    pos++;\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos);\n      if (!isSpace(code) && code !== 0x0A) { break; }\n    }\n    if (pos >= max) { return false; }\n\n    // [link](  <href>  \"title\"  )\n    //          ^^^^^^ parsing link destination\n    start = pos;\n    res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n    if (res.ok) {\n      href = state.md.normalizeLink(res.str);\n      if (state.md.validateLink(href)) {\n        pos = res.pos;\n      } else {\n        href = '';\n      }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                ^^ skipping these spaces\n    start = pos;\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos);\n      if (!isSpace(code) && code !== 0x0A) { break; }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                  ^^^^^^^ parsing link title\n    res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n    if (pos < max && start !== pos && res.ok) {\n      title = res.str;\n      pos = res.pos;\n\n      // [link](  <href>  \"title\"  )\n      //                         ^^ skipping these spaces\n      for (; pos < max; pos++) {\n        code = state.src.charCodeAt(pos);\n        if (!isSpace(code) && code !== 0x0A) { break; }\n      }\n    } else {\n      title = '';\n    }\n\n    if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n      state.pos = oldPos;\n      return false;\n    }\n    pos++;\n  } else {\n    //\n    // Link reference\n    //\n    if (typeof state.env.references === 'undefined') { return false; }\n\n    if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n      start = pos + 1;\n      pos = state.md.helpers.parseLinkLabel(state, pos);\n      if (pos >= 0) {\n        label = state.src.slice(start, pos++);\n      } else {\n        pos = labelEnd + 1;\n      }\n    } else {\n      pos = labelEnd + 1;\n    }\n\n    // covers label === '' and label === undefined\n    // (collapsed reference link and shortcut reference link respectively)\n    if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n    ref = state.env.references[normalizeReference(label)];\n    if (!ref) {\n      state.pos = oldPos;\n      return false;\n    }\n    href = ref.href;\n    title = ref.title;\n  }\n\n  //\n  // We found the end of the link, and know for a fact it's a valid link;\n  // so all that's left to do is to call tokenizer.\n  //\n  if (!silent) {\n    content = state.src.slice(labelStart, labelEnd);\n\n    state.md.inline.parse(\n      content,\n      state.md,\n      state.env,\n      tokens = []\n    );\n\n    token          = state.push('image', 'img', 0);\n    token.attrs    = attrs = [ [ 'src', href ], [ 'alt', '' ] ];\n    token.children = tokens;\n    token.content  = content;\n\n    if (title) {\n      attrs.push([ 'title', title ]);\n    }\n  }\n\n  state.pos = pos;\n  state.posMax = max;\n  return true;\n};\n","// Process autolinks '<protocol:...>'\n\n'use strict';\n\n\n/*eslint max-len:0*/\nvar EMAIL_RE    = /^<([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/;\nvar AUTOLINK_RE = /^<([a-zA-Z][a-zA-Z0-9+.\\-]{1,31}):([^<>\\x00-\\x20]*)>/;\n\n\nmodule.exports = function autolink(state, silent) {\n  var tail, linkMatch, emailMatch, url, fullUrl, token,\n      pos = state.pos;\n\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n  tail = state.src.slice(pos);\n\n  if (tail.indexOf('>') < 0) { return false; }\n\n  if (AUTOLINK_RE.test(tail)) {\n    linkMatch = tail.match(AUTOLINK_RE);\n\n    url = linkMatch[0].slice(1, -1);\n    fullUrl = state.md.normalizeLink(url);\n    if (!state.md.validateLink(fullUrl)) { return false; }\n\n    if (!silent) {\n      token         = state.push('link_open', 'a', 1);\n      token.attrs   = [ [ 'href', fullUrl ] ];\n      token.markup  = 'autolink';\n      token.info    = 'auto';\n\n      token         = state.push('text', '', 0);\n      token.content = state.md.normalizeLinkText(url);\n\n      token         = state.push('link_close', 'a', -1);\n      token.markup  = 'autolink';\n      token.info    = 'auto';\n    }\n\n    state.pos += linkMatch[0].length;\n    return true;\n  }\n\n  if (EMAIL_RE.test(tail)) {\n    emailMatch = tail.match(EMAIL_RE);\n\n    url = emailMatch[0].slice(1, -1);\n    fullUrl = state.md.normalizeLink('mailto:' + url);\n    if (!state.md.validateLink(fullUrl)) { return false; }\n\n    if (!silent) {\n      token         = state.push('link_open', 'a', 1);\n      token.attrs   = [ [ 'href', fullUrl ] ];\n      token.markup  = 'autolink';\n      token.info    = 'auto';\n\n      token         = state.push('text', '', 0);\n      token.content = state.md.normalizeLinkText(url);\n\n      token         = state.push('link_close', 'a', -1);\n      token.markup  = 'autolink';\n      token.info    = 'auto';\n    }\n\n    state.pos += emailMatch[0].length;\n    return true;\n  }\n\n  return false;\n};\n","// Process html tags\n\n'use strict';\n\n\nvar HTML_TAG_RE = require('../common/html_re').HTML_TAG_RE;\n\n\nfunction isLetter(ch) {\n  /*eslint no-bitwise:0*/\n  var lc = ch | 0x20; // to lower case\n  return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */);\n}\n\n\nmodule.exports = function html_inline(state, silent) {\n  var ch, match, max, token,\n      pos = state.pos;\n\n  if (!state.md.options.html) { return false; }\n\n  // Check start\n  max = state.posMax;\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n      pos + 2 >= max) {\n    return false;\n  }\n\n  // Quick fail on second char\n  ch = state.src.charCodeAt(pos + 1);\n  if (ch !== 0x21/* ! */ &&\n      ch !== 0x3F/* ? */ &&\n      ch !== 0x2F/* / */ &&\n      !isLetter(ch)) {\n    return false;\n  }\n\n  match = state.src.slice(pos).match(HTML_TAG_RE);\n  if (!match) { return false; }\n\n  if (!silent) {\n    token         = state.push('html_inline', '', 0);\n    token.content = state.src.slice(pos, pos + match[0].length);\n  }\n  state.pos += match[0].length;\n  return true;\n};\n","// Process html entity - &#123;, &#xAF;, &quot;, ...\n\n'use strict';\n\nvar entities          = require('../common/entities');\nvar has               = require('../common/utils').has;\nvar isValidEntityCode = require('../common/utils').isValidEntityCode;\nvar fromCodePoint     = require('../common/utils').fromCodePoint;\n\n\nvar DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;\nvar NAMED_RE   = /^&([a-z][a-z0-9]{1,31});/i;\n\n\nmodule.exports = function entity(state, silent) {\n  var ch, code, match, pos = state.pos, max = state.posMax;\n\n  if (state.src.charCodeAt(pos) !== 0x26/* & */) { return false; }\n\n  if (pos + 1 < max) {\n    ch = state.src.charCodeAt(pos + 1);\n\n    if (ch === 0x23 /* # */) {\n      match = state.src.slice(pos).match(DIGITAL_RE);\n      if (match) {\n        if (!silent) {\n          code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);\n          state.pending += isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD);\n        }\n        state.pos += match[0].length;\n        return true;\n      }\n    } else {\n      match = state.src.slice(pos).match(NAMED_RE);\n      if (match) {\n        if (has(entities, match[1])) {\n          if (!silent) { state.pending += entities[match[1]]; }\n          state.pos += match[0].length;\n          return true;\n        }\n      }\n    }\n  }\n\n  if (!silent) { state.pending += '&'; }\n  state.pos++;\n  return true;\n};\n","// For each opening emphasis-like marker find a matching closing one\n//\n'use strict';\n\n\nfunction processDelimiters(state, delimiters) {\n  var closerIdx, openerIdx, closer, opener, minOpenerIdx, newMinOpenerIdx,\n      isOddMatch, lastJump,\n      openersBottom = {},\n      max = delimiters.length;\n\n  for (closerIdx = 0; closerIdx < max; closerIdx++) {\n    closer = delimiters[closerIdx];\n\n    // Length is only used for emphasis-specific \"rule of 3\",\n    // if it's not defined (in strikethrough or 3rd party plugins),\n    // we can default it to 0 to disable those checks.\n    //\n    closer.length = closer.length || 0;\n\n    if (!closer.close) continue;\n\n    // Previously calculated lower bounds (previous fails)\n    // for each marker and each delimiter length modulo 3.\n    if (!openersBottom.hasOwnProperty(closer.marker)) {\n      openersBottom[closer.marker] = [ -1, -1, -1 ];\n    }\n\n    minOpenerIdx = openersBottom[closer.marker][closer.length % 3];\n    newMinOpenerIdx = -1;\n\n    openerIdx = closerIdx - closer.jump - 1;\n\n    for (; openerIdx > minOpenerIdx; openerIdx -= opener.jump + 1) {\n      opener = delimiters[openerIdx];\n\n      if (opener.marker !== closer.marker) continue;\n\n      if (newMinOpenerIdx === -1) newMinOpenerIdx = openerIdx;\n\n      if (opener.open &&\n          opener.end < 0 &&\n          opener.level === closer.level) {\n\n        isOddMatch = false;\n\n        // from spec:\n        //\n        // If one of the delimiters can both open and close emphasis, then the\n        // sum of the lengths of the delimiter runs containing the opening and\n        // closing delimiters must not be a multiple of 3 unless both lengths\n        // are multiples of 3.\n        //\n        if (opener.close || closer.open) {\n          if ((opener.length + closer.length) % 3 === 0) {\n            if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n              isOddMatch = true;\n            }\n          }\n        }\n\n        if (!isOddMatch) {\n          // If previous delimiter cannot be an opener, we can safely skip\n          // the entire sequence in future checks. This is required to make\n          // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n          //\n          lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ?\n            delimiters[openerIdx - 1].jump + 1 :\n            0;\n\n          closer.jump  = closerIdx - openerIdx + lastJump;\n          closer.open  = false;\n          opener.end   = closerIdx;\n          opener.jump  = lastJump;\n          opener.close = false;\n          newMinOpenerIdx = -1;\n          break;\n        }\n      }\n    }\n\n    if (newMinOpenerIdx !== -1) {\n      // If match for this delimiter run failed, we want to set lower bound for\n      // future lookups. This is required to make sure algorithm has linear\n      // complexity.\n      //\n      // See details here:\n      // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n      //\n      openersBottom[closer.marker][(closer.length || 0) % 3] = newMinOpenerIdx;\n    }\n  }\n}\n\n\nmodule.exports = function link_pairs(state) {\n  var curr,\n      tokens_meta = state.tokens_meta,\n      max = state.tokens_meta.length;\n\n  processDelimiters(state, state.delimiters);\n\n  for (curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      processDelimiters(state, tokens_meta[curr].delimiters);\n    }\n  }\n};\n","// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n'use strict';\n\n\nmodule.exports = function text_collapse(state) {\n  var curr, last,\n      level = 0,\n      tokens = state.tokens,\n      max = state.tokens.length;\n\n  for (curr = last = 0; curr < max; curr++) {\n    // re-calculate levels after emphasis/strikethrough turns some text nodes\n    // into opening/closing tags\n    if (tokens[curr].nesting < 0) level--; // closing tag\n    tokens[curr].level = level;\n    if (tokens[curr].nesting > 0) level++; // opening tag\n\n    if (tokens[curr].type === 'text' &&\n        curr + 1 < max &&\n        tokens[curr + 1].type === 'text') {\n\n      // collapse two adjacent text nodes\n      tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n    } else {\n      if (curr !== last) { tokens[last] = tokens[curr]; }\n\n      last++;\n    }\n  }\n\n  if (curr !== last) {\n    tokens.length = last;\n  }\n};\n","// Inline parser state\n\n'use strict';\n\n\nvar Token          = require('../token');\nvar isWhiteSpace   = require('../common/utils').isWhiteSpace;\nvar isPunctChar    = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\n\nfunction StateInline(src, md, env, outTokens) {\n  this.src = src;\n  this.env = env;\n  this.md = md;\n  this.tokens = outTokens;\n  this.tokens_meta = Array(outTokens.length);\n\n  this.pos = 0;\n  this.posMax = this.src.length;\n  this.level = 0;\n  this.pending = '';\n  this.pendingLevel = 0;\n\n  // Stores { start: end } pairs. Useful for backtrack\n  // optimization of pairs parse (emphasis, strikes).\n  this.cache = {};\n\n  // List of emphasis-like delimiters for current tag\n  this.delimiters = [];\n\n  // Stack of delimiter lists for upper level tags\n  this._prev_delimiters = [];\n}\n\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n  var token = new Token('text', '', 0);\n  token.content = this.pending;\n  token.level = this.pendingLevel;\n  this.tokens.push(token);\n  this.pending = '';\n  return token;\n};\n\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (type, tag, nesting) {\n  if (this.pending) {\n    this.pushPending();\n  }\n\n  var token = new Token(type, tag, nesting);\n  var token_meta = null;\n\n  if (nesting < 0) {\n    // closing tag\n    this.level--;\n    this.delimiters = this._prev_delimiters.pop();\n  }\n\n  token.level = this.level;\n\n  if (nesting > 0) {\n    // opening tag\n    this.level++;\n    this._prev_delimiters.push(this.delimiters);\n    this.delimiters = [];\n    token_meta = { delimiters: this.delimiters };\n  }\n\n  this.pendingLevel = this.level;\n  this.tokens.push(token);\n  this.tokens_meta.push(token_meta);\n  return token;\n};\n\n\n// Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n//  - start - position to scan from (it should point at a valid marker);\n//  - canSplitWord - determine if these markers can be found inside a word\n//\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n  var pos = start, lastChar, nextChar, count, can_open, can_close,\n      isLastWhiteSpace, isLastPunctChar,\n      isNextWhiteSpace, isNextPunctChar,\n      left_flanking = true,\n      right_flanking = true,\n      max = this.posMax,\n      marker = this.src.charCodeAt(start);\n\n  // treat beginning of the line as a whitespace\n  lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20;\n\n  while (pos < max && this.src.charCodeAt(pos) === marker) { pos++; }\n\n  count = pos - start;\n\n  // treat end of the line as a whitespace\n  nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20;\n\n  isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n  isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n  isLastWhiteSpace = isWhiteSpace(lastChar);\n  isNextWhiteSpace = isWhiteSpace(nextChar);\n\n  if (isNextWhiteSpace) {\n    left_flanking = false;\n  } else if (isNextPunctChar) {\n    if (!(isLastWhiteSpace || isLastPunctChar)) {\n      left_flanking = false;\n    }\n  }\n\n  if (isLastWhiteSpace) {\n    right_flanking = false;\n  } else if (isLastPunctChar) {\n    if (!(isNextWhiteSpace || isNextPunctChar)) {\n      right_flanking = false;\n    }\n  }\n\n  if (!canSplitWord) {\n    can_open  = left_flanking  && (!right_flanking || isLastPunctChar);\n    can_close = right_flanking && (!left_flanking  || isNextPunctChar);\n  } else {\n    can_open  = left_flanking;\n    can_close = right_flanking;\n  }\n\n  return {\n    can_open:  can_open,\n    can_close: can_close,\n    length:    count\n  };\n};\n\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token;\n\n\nmodule.exports = StateInline;\n","'use strict';\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Helpers\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n\n  sources.forEach(function (source) {\n    if (!source) { return; }\n\n    Object.keys(source).forEach(function (key) {\n      obj[key] = source[key];\n    });\n  });\n\n  return obj;\n}\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\nfunction isString(obj) { return _class(obj) === '[object String]'; }\nfunction isObject(obj) { return _class(obj) === '[object Object]'; }\nfunction isRegExp(obj) { return _class(obj) === '[object RegExp]'; }\nfunction isFunction(obj) { return _class(obj) === '[object Function]'; }\n\n\nfunction escapeRE(str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&'); }\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar defaultOptions = {\n  fuzzyLink: true,\n  fuzzyEmail: true,\n  fuzzyIP: false\n};\n\n\nfunction isOptionsObj(obj) {\n  return Object.keys(obj || {}).reduce(function (acc, k) {\n    return acc || defaultOptions.hasOwnProperty(k);\n  }, false);\n}\n\n\nvar defaultSchemas = {\n  'http:': {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.http) {\n        // compile lazily, because \"host\"-containing variables can change on tlds update.\n        self.re.http =  new RegExp(\n          '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n        );\n      }\n      if (self.re.http.test(tail)) {\n        return tail.match(self.re.http)[0].length;\n      }\n      return 0;\n    }\n  },\n  'https:':  'http:',\n  'ftp:':    'http:',\n  '//':      {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.no_http) {\n      // compile lazily, because \"host\"-containing variables can change on tlds update.\n        self.re.no_http =  new RegExp(\n          '^' +\n          self.re.src_auth +\n          // Don't allow single-level domains, because of false positives like '//test'\n          // with code comments\n          '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n          self.re.src_port +\n          self.re.src_host_terminator +\n          self.re.src_path,\n\n          'i'\n        );\n      }\n\n      if (self.re.no_http.test(tail)) {\n        // should not be `://` & `///`, that protects from errors in protocol name\n        if (pos >= 3 && text[pos - 3] === ':') { return 0; }\n        if (pos >= 3 && text[pos - 3] === '/') { return 0; }\n        return tail.match(self.re.no_http)[0].length;\n      }\n      return 0;\n    }\n  },\n  'mailto:': {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.mailto) {\n        self.re.mailto =  new RegExp(\n          '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n        );\n      }\n      if (self.re.mailto.test(tail)) {\n        return tail.match(self.re.mailto)[0].length;\n      }\n      return 0;\n    }\n  }\n};\n\n/*eslint-disable max-len*/\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\nvar tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]';\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nvar tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|');\n\n/*eslint-enable max-len*/\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction resetScanCache(self) {\n  self.__index__ = -1;\n  self.__text_cache__   = '';\n}\n\nfunction createValidator(re) {\n  return function (text, pos) {\n    var tail = text.slice(pos);\n\n    if (re.test(tail)) {\n      return tail.match(re)[0].length;\n    }\n    return 0;\n  };\n}\n\nfunction createNormalizer() {\n  return function (match, self) {\n    self.normalize(match);\n  };\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile(self) {\n\n  // Load & clone RE patterns.\n  var re = self.re = require('./lib/re')(self.__opts__);\n\n  // Define dynamic patterns\n  var tlds = self.__tlds__.slice();\n\n  self.onCompile();\n\n  if (!self.__tlds_replaced__) {\n    tlds.push(tlds_2ch_src_re);\n  }\n  tlds.push(re.src_xn);\n\n  re.src_tlds = tlds.join('|');\n\n  function untpl(tpl) { return tpl.replace('%TLDS%', re.src_tlds); }\n\n  re.email_fuzzy      = RegExp(untpl(re.tpl_email_fuzzy), 'i');\n  re.link_fuzzy       = RegExp(untpl(re.tpl_link_fuzzy), 'i');\n  re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');\n  re.host_fuzzy_test  = RegExp(untpl(re.tpl_host_fuzzy_test), 'i');\n\n  //\n  // Compile each schema\n  //\n\n  var aliases = [];\n\n  self.__compiled__ = {}; // Reset compiled data\n\n  function schemaError(name, val) {\n    throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val);\n  }\n\n  Object.keys(self.__schemas__).forEach(function (name) {\n    var val = self.__schemas__[name];\n\n    // skip disabled methods\n    if (val === null) { return; }\n\n    var compiled = { validate: null, link: null };\n\n    self.__compiled__[name] = compiled;\n\n    if (isObject(val)) {\n      if (isRegExp(val.validate)) {\n        compiled.validate = createValidator(val.validate);\n      } else if (isFunction(val.validate)) {\n        compiled.validate = val.validate;\n      } else {\n        schemaError(name, val);\n      }\n\n      if (isFunction(val.normalize)) {\n        compiled.normalize = val.normalize;\n      } else if (!val.normalize) {\n        compiled.normalize = createNormalizer();\n      } else {\n        schemaError(name, val);\n      }\n\n      return;\n    }\n\n    if (isString(val)) {\n      aliases.push(name);\n      return;\n    }\n\n    schemaError(name, val);\n  });\n\n  //\n  // Compile postponed aliases\n  //\n\n  aliases.forEach(function (alias) {\n    if (!self.__compiled__[self.__schemas__[alias]]) {\n      // Silently fail on missed schemas to avoid errons on disable.\n      // schemaError(alias, self.__schemas__[alias]);\n      return;\n    }\n\n    self.__compiled__[alias].validate =\n      self.__compiled__[self.__schemas__[alias]].validate;\n    self.__compiled__[alias].normalize =\n      self.__compiled__[self.__schemas__[alias]].normalize;\n  });\n\n  //\n  // Fake record for guessed links\n  //\n  self.__compiled__[''] = { validate: null, normalize: createNormalizer() };\n\n  //\n  // Build schema condition\n  //\n  var slist = Object.keys(self.__compiled__)\n                      .filter(function (name) {\n                        // Filter disabled & fake schemas\n                        return name.length > 0 && self.__compiled__[name];\n                      })\n                      .map(escapeRE)\n                      .join('|');\n  // (?!_) cause 1.5x slowdown\n  self.re.schema_test   = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i');\n  self.re.schema_search = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig');\n\n  self.re.pretest = RegExp(\n    '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n    'i'\n  );\n\n  //\n  // Cleanup\n  //\n\n  resetScanCache(self);\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match(self, shift) {\n  var start = self.__index__,\n      end   = self.__last_index__,\n      text  = self.__text_cache__.slice(start, end);\n\n  /**\n   * Match#schema -> String\n   *\n   * Prefix (protocol) for matched string.\n   **/\n  this.schema    = self.__schema__.toLowerCase();\n  /**\n   * Match#index -> Number\n   *\n   * First position of matched string.\n   **/\n  this.index     = start + shift;\n  /**\n   * Match#lastIndex -> Number\n   *\n   * Next position after matched string.\n   **/\n  this.lastIndex = end + shift;\n  /**\n   * Match#raw -> String\n   *\n   * Matched string.\n   **/\n  this.raw       = text;\n  /**\n   * Match#text -> String\n   *\n   * Notmalized text of matched string.\n   **/\n  this.text      = text;\n  /**\n   * Match#url -> String\n   *\n   * Normalized url of matched string.\n   **/\n  this.url       = text;\n}\n\nfunction createMatch(self, shift) {\n  var match = new Match(self, shift);\n\n  self.__compiled__[match.schema].normalize(match, self);\n\n  return match;\n}\n\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n *   for example). `linkify-it` makes shure that prefix is not preceeded with\n *   alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n *   - _String_ - just alias to existing rule\n *   - _Object_\n *     - _validate_ - validator function (should return matched length on success),\n *       or `RegExp`.\n *     - _normalize_ - optional function to normalize text & url of matched result\n *       (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n *   like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt(schemas, options) {\n  if (!(this instanceof LinkifyIt)) {\n    return new LinkifyIt(schemas, options);\n  }\n\n  if (!options) {\n    if (isOptionsObj(schemas)) {\n      options = schemas;\n      schemas = {};\n    }\n  }\n\n  this.__opts__           = assign({}, defaultOptions, options);\n\n  // Cache last tested result. Used to skip repeating steps on next `match` call.\n  this.__index__          = -1;\n  this.__last_index__     = -1; // Next scan position\n  this.__schema__         = '';\n  this.__text_cache__     = '';\n\n  this.__schemas__        = assign({}, defaultSchemas, schemas);\n  this.__compiled__       = {};\n\n  this.__tlds__           = tlds_default;\n  this.__tlds_replaced__  = false;\n\n  this.re = {};\n\n  compile(this);\n}\n\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add(schema, definition) {\n  this.__schemas__[schema] = definition;\n  compile(this);\n  return this;\n};\n\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set(options) {\n  this.__opts__ = assign(this.__opts__, options);\n  return this;\n};\n\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test(text) {\n  // Reset scan cache\n  this.__text_cache__ = text;\n  this.__index__      = -1;\n\n  if (!text.length) { return false; }\n\n  var m, ml, me, len, shift, next, re, tld_pos, at_pos;\n\n  // try to scan for link with schema - that's the most simple rule\n  if (this.re.schema_test.test(text)) {\n    re = this.re.schema_search;\n    re.lastIndex = 0;\n    while ((m = re.exec(text)) !== null) {\n      len = this.testSchemaAt(text, m[2], re.lastIndex);\n      if (len) {\n        this.__schema__     = m[2];\n        this.__index__      = m.index + m[1].length;\n        this.__last_index__ = m.index + m[0].length + len;\n        break;\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n    // guess schemaless links\n    tld_pos = text.search(this.re.host_fuzzy_test);\n    if (tld_pos >= 0) {\n      // if tld is located after found link - no need to check fuzzy pattern\n      if (this.__index__ < 0 || tld_pos < this.__index__) {\n        if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n\n          shift = ml.index + ml[1].length;\n\n          if (this.__index__ < 0 || shift < this.__index__) {\n            this.__schema__     = '';\n            this.__index__      = shift;\n            this.__last_index__ = ml.index + ml[0].length;\n          }\n        }\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n    // guess schemaless emails\n    at_pos = text.indexOf('@');\n    if (at_pos >= 0) {\n      // We can't skip this check, because this cases are possible:\n      // 192.168.1.1@gmail.com, my.in@example.com\n      if ((me = text.match(this.re.email_fuzzy)) !== null) {\n\n        shift = me.index + me[1].length;\n        next  = me.index + me[0].length;\n\n        if (this.__index__ < 0 || shift < this.__index__ ||\n            (shift === this.__index__ && next > this.__last_index__)) {\n          this.__schema__     = 'mailto:';\n          this.__index__      = shift;\n          this.__last_index__ = next;\n        }\n      }\n    }\n  }\n\n  return this.__index__ >= 0;\n};\n\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest(text) {\n  return this.re.pretest.test(text);\n};\n\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) {\n  // If not supported schema check requested - terminate\n  if (!this.__compiled__[schema.toLowerCase()]) {\n    return 0;\n  }\n  return this.__compiled__[schema.toLowerCase()].validate(text, pos, this);\n};\n\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n *   protocol-neutral  links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match(text) {\n  var shift = 0, result = [];\n\n  // Try to take previous element from cache, if .test() called before\n  if (this.__index__ >= 0 && this.__text_cache__ === text) {\n    result.push(createMatch(this, shift));\n    shift = this.__last_index__;\n  }\n\n  // Cut head if cache was used\n  var tail = shift ? text.slice(shift) : text;\n\n  // Scan string until end reached\n  while (this.test(tail)) {\n    result.push(createMatch(this, shift));\n\n    tail = tail.slice(this.__last_index__);\n    shift += this.__last_index__;\n  }\n\n  if (result.length) {\n    return result;\n  }\n\n  return null;\n};\n\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\n *   are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds(list, keepOld) {\n  list = Array.isArray(list) ? list : [ list ];\n\n  if (!keepOld) {\n    this.__tlds__ = list.slice();\n    this.__tlds_replaced__ = true;\n    compile(this);\n    return this;\n  }\n\n  this.__tlds__ = this.__tlds__.concat(list)\n                                  .sort()\n                                  .filter(function (el, idx, arr) {\n                                    return el !== arr[idx - 1];\n                                  })\n                                  .reverse();\n\n  compile(this);\n  return this;\n};\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize(match) {\n\n  // Do minimal possible changes by default. Need to collect feedback prior\n  // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n  if (!match.schema) { match.url = 'http://' + match.url; }\n\n  if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n    match.url = 'mailto:' + match.url;\n  }\n};\n\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile() {\n};\n\n\nmodule.exports = LinkifyIt;\n","'use strict';\n\n\nmodule.exports = function (opts) {\n  var re = {};\n\n  // Use direct extract instead of `regenerate` to reduse browserified size\n  re.src_Any = require('uc.micro/properties/Any/regex').source;\n  re.src_Cc  = require('uc.micro/categories/Cc/regex').source;\n  re.src_Z   = require('uc.micro/categories/Z/regex').source;\n  re.src_P   = require('uc.micro/categories/P/regex').source;\n\n  // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n  re.src_ZPCc = [ re.src_Z, re.src_P, re.src_Cc ].join('|');\n\n  // \\p{\\Z\\Cc} (white spaces + control)\n  re.src_ZCc = [ re.src_Z, re.src_Cc ].join('|');\n\n  // Experimental. List of chars, completely prohibited in links\n  // because can separate it from other part of text\n  var text_separators = '[><\\uff5c]';\n\n  // All possible word characters (everything without punctuation, spaces & controls)\n  // Defined via punctuation & spaces to save space\n  // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n  re.src_pseudo_letter       = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')';\n  // The same as abothe but without [0-9]\n  // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n  ////////////////////////////////////////////////////////////////////////////////\n\n  re.src_ip4 =\n\n    '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';\n\n  // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n  re.src_auth    = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?';\n\n  re.src_port =\n\n    '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?';\n\n  re.src_host_terminator =\n\n    '(?=$|' + text_separators + '|' + re.src_ZPCc + ')(?!-|_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))';\n\n  re.src_path =\n\n    '(?:' +\n      '[/?#]' +\n        '(?:' +\n          '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-]).|' +\n          '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n          '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n          '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n          '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n          \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n          \"\\\\'(?=\" + re.src_pseudo_letter + '|[-]).|' +  // allow `I'm_king` if no pair found\n          '\\\\.{2,4}[a-zA-Z0-9%/]|' + // github has ... in commit range links,\n                                     // google has .... in links (issue #66)\n                                     // Restrict to\n                                     // - english\n                                     // - percent-encoded\n                                     // - parts of file path\n                                     // until more examples found.\n          '\\\\.(?!' + re.src_ZCc + '|[.]).|' +\n          (opts && opts['---'] ?\n            '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n            :\n            '\\\\-+|'\n          ) +\n          '\\\\,(?!' + re.src_ZCc + ').|' +      // allow `,,,` in paths\n          '\\\\!(?!' + re.src_ZCc + '|[!]).|' +\n          '\\\\?(?!' + re.src_ZCc + '|[?]).' +\n        ')+' +\n      '|\\\\/' +\n    ')?';\n\n  // Allow anything in markdown spec, forbid quote (\") at the first position\n  // because emails enclosed in quotes are far more common\n  re.src_email_name =\n\n    '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*';\n\n  re.src_xn =\n\n    'xn--[a-z0-9\\\\-]{1,59}';\n\n  // More to read about domain names\n  // http://serverfault.com/questions/638260/\n\n  re.src_domain_root =\n\n    // Allow letters & digits (http://test1)\n    '(?:' +\n      re.src_xn +\n      '|' +\n      re.src_pseudo_letter + '{1,63}' +\n    ')';\n\n  re.src_domain =\n\n    '(?:' +\n      re.src_xn +\n      '|' +\n      '(?:' + re.src_pseudo_letter + ')' +\n      '|' +\n      '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n    ')';\n\n  re.src_host =\n\n    '(?:' +\n    // Don't need IP check, because digits are already allowed in normal domain names\n    //   src_ip4 +\n    // '|' +\n      '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/*_root*/ + ')' +\n    ')';\n\n  re.tpl_host_fuzzy =\n\n    '(?:' +\n      re.src_ip4 +\n    '|' +\n      '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n    ')';\n\n  re.tpl_host_no_ip_fuzzy =\n\n    '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))';\n\n  re.src_host_strict =\n\n    re.src_host + re.src_host_terminator;\n\n  re.tpl_host_fuzzy_strict =\n\n    re.tpl_host_fuzzy + re.src_host_terminator;\n\n  re.src_host_port_strict =\n\n    re.src_host + re.src_port + re.src_host_terminator;\n\n  re.tpl_host_port_fuzzy_strict =\n\n    re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;\n\n  re.tpl_host_port_no_ip_fuzzy_strict =\n\n    re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator;\n\n\n  ////////////////////////////////////////////////////////////////////////////////\n  // Main rules\n\n  // Rude test fuzzy links by host, for quick deny\n  re.tpl_host_fuzzy_test =\n\n    'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))';\n\n  re.tpl_email_fuzzy =\n\n      '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' +\n      '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')';\n\n  re.tpl_link_fuzzy =\n      // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n      // but can start with > (markdown blockquote)\n      '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n      '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')';\n\n  re.tpl_link_no_ip_fuzzy =\n      // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n      // but can start with > (markdown blockquote)\n      '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n      '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')';\n\n  return re;\n};\n","/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t    counter = 0,\n\t\t    length = string.length,\n\t\t    value,\n\t\t    extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t//  0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t    inputLength = input.length,\n\t\t    out,\n\t\t    i = 0,\n\t\t    n = initialN,\n\t\t    bias = initialBias,\n\t\t    basic,\n\t\t    j,\n\t\t    index,\n\t\t    oldi,\n\t\t    w,\n\t\t    k,\n\t\t    digit,\n\t\t    t,\n\t\t    /** Cached calculation results */\n\t\t    baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t    delta,\n\t\t    handledCPCount,\n\t\t    basicLength,\n\t\t    bias,\n\t\t    j,\n\t\t    m,\n\t\t    q,\n\t\t    k,\n\t\t    t,\n\t\t    currentValue,\n\t\t    output = [],\n\t\t    /** `inputLength` will hold the number of code points in `input`. */\n\t\t    inputLength,\n\t\t    /** Cached calculation results */\n\t\t    handledCPCountPlusOne,\n\t\t    baseMinusT,\n\t\t    qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","// markdown-it default options\n\n'use strict';\n\n\nmodule.exports = {\n  options: {\n    html:         false,        // Enable HTML tags in source\n    xhtmlOut:     false,        // Use '/' to close single tags (<br />)\n    breaks:       false,        // Convert '\\n' in paragraphs into <br>\n    langPrefix:   'language-',  // CSS language prefix for fenced blocks\n    linkify:      false,        // autoconvert URL-like texts to links\n\n    // Enable some language-neutral replacements + quotes beautification\n    typographer:  false,\n\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n\n    maxNesting:   100            // Internal protection, recursion limit\n  },\n\n  components: {\n\n    core: {},\n    block: {},\n    inline: {}\n  }\n};\n","// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n\n'use strict';\n\n\nmodule.exports = {\n  options: {\n    html:         false,        // Enable HTML tags in source\n    xhtmlOut:     false,        // Use '/' to close single tags (<br />)\n    breaks:       false,        // Convert '\\n' in paragraphs into <br>\n    langPrefix:   'language-',  // CSS language prefix for fenced blocks\n    linkify:      false,        // autoconvert URL-like texts to links\n\n    // Enable some language-neutral replacements + quotes beautification\n    typographer:  false,\n\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n\n    maxNesting:   20            // Internal protection, recursion limit\n  },\n\n  components: {\n\n    core: {\n      rules: [\n        'normalize',\n        'block',\n        'inline'\n      ]\n    },\n\n    block: {\n      rules: [\n        'paragraph'\n      ]\n    },\n\n    inline: {\n      rules: [\n        'text'\n      ],\n      rules2: [\n        'balance_pairs',\n        'text_collapse'\n      ]\n    }\n  }\n};\n","// Commonmark default options\n\n'use strict';\n\n\nmodule.exports = {\n  options: {\n    html:         true,         // Enable HTML tags in source\n    xhtmlOut:     true,         // Use '/' to close single tags (<br />)\n    breaks:       false,        // Convert '\\n' in paragraphs into <br>\n    langPrefix:   'language-',  // CSS language prefix for fenced blocks\n    linkify:      false,        // autoconvert URL-like texts to links\n\n    // Enable some language-neutral replacements + quotes beautification\n    typographer:  false,\n\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n\n    maxNesting:   20            // Internal protection, recursion limit\n  },\n\n  components: {\n\n    core: {\n      rules: [\n        'normalize',\n        'block',\n        'inline'\n      ]\n    },\n\n    block: {\n      rules: [\n        'blockquote',\n        'code',\n        'fence',\n        'heading',\n        'hr',\n        'html_block',\n        'lheading',\n        'list',\n        'reference',\n        'paragraph'\n      ]\n    },\n\n    inline: {\n      rules: [\n        'autolink',\n        'backticks',\n        'emphasis',\n        'entity',\n        'escape',\n        'html_inline',\n        'image',\n        'link',\n        'newline',\n        'text'\n      ],\n      rules2: [\n        'balance_pairs',\n        'emphasis',\n        'text_collapse'\n      ]\n    }\n  }\n};\n","// Markdown-it plugin to render GitHub-style task lists; see\n//\n// https://github.com/blog/1375-task-lists-in-gfm-issues-pulls-comments\n// https://github.com/blog/1825-task-lists-in-all-markdown-documents\n\nvar disableCheckboxes = true;\nvar useLabelWrapper = false;\nvar useLabelAfter = false;\n\nmodule.exports = function(md, options) {\n\tif (options) {\n\t\tdisableCheckboxes = !options.enabled;\n\t\tuseLabelWrapper = !!options.label;\n\t\tuseLabelAfter = !!options.labelAfter;\n\t}\n\n\tmd.core.ruler.after('inline', 'github-task-lists', function(state) {\n\t\tvar tokens = state.tokens;\n\t\tfor (var i = 2; i < tokens.length; i++) {\n\t\t\tif (isTodoItem(tokens, i)) {\n\t\t\t\ttodoify(tokens[i], state.Token);\n\t\t\t\tattrSet(tokens[i-2], 'class', 'task-list-item' + (!disableCheckboxes ? ' enabled' : ''));\n\t\t\t\tattrSet(tokens[parentToken(tokens, i-2)], 'class', 'contains-task-list');\n\t\t\t}\n\t\t}\n\t});\n};\n\nfunction attrSet(token, name, value) {\n\tvar index = token.attrIndex(name);\n\tvar attr = [name, value];\n\n\tif (index < 0) {\n\t\ttoken.attrPush(attr);\n\t} else {\n\t\ttoken.attrs[index] = attr;\n\t}\n}\n\nfunction parentToken(tokens, index) {\n\tvar targetLevel = tokens[index].level - 1;\n\tfor (var i = index - 1; i >= 0; i--) {\n\t\tif (tokens[i].level === targetLevel) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n}\n\nfunction isTodoItem(tokens, index) {\n\treturn isInline(tokens[index]) &&\n\t       isParagraph(tokens[index - 1]) &&\n\t       isListItem(tokens[index - 2]) &&\n\t       startsWithTodoMarkdown(tokens[index]);\n}\n\nfunction todoify(token, TokenConstructor) {\n\ttoken.children.unshift(makeCheckbox(token, TokenConstructor));\n\ttoken.children[1].content = token.children[1].content.slice(3);\n\ttoken.content = token.content.slice(3);\n\n\tif (useLabelWrapper) {\n\t\tif (useLabelAfter) {\n\t\t\ttoken.children.pop();\n\n\t\t\t// Use large random number as id property of the checkbox.\n\t\t\tvar id = 'task-item-' + Math.ceil(Math.random() * (10000 * 1000) - 1000);\n\t\t\ttoken.children[0].content = token.children[0].content.slice(0, -1) + ' id=\"' + id + '\">';\n\t\t\ttoken.children.push(afterLabel(token.content, id, TokenConstructor));\n\t\t} else {\n\t\t\ttoken.children.unshift(beginLabel(TokenConstructor));\n\t\t\ttoken.children.push(endLabel(TokenConstructor));\n\t\t}\n\t}\n}\n\nfunction makeCheckbox(token, TokenConstructor) {\n\tvar checkbox = new TokenConstructor('html_inline', '', 0);\n\tvar disabledAttr = disableCheckboxes ? ' disabled=\"\" ' : '';\n\tif (token.content.indexOf('[ ] ') === 0) {\n\t\tcheckbox.content = '<input class=\"task-list-item-checkbox\"' + disabledAttr + 'type=\"checkbox\">';\n\t} else if (token.content.indexOf('[x] ') === 0 || token.content.indexOf('[X] ') === 0) {\n\t\tcheckbox.content = '<input class=\"task-list-item-checkbox\" checked=\"\"' + disabledAttr + 'type=\"checkbox\">';\n\t}\n\treturn checkbox;\n}\n\n// these next two functions are kind of hacky; probably should really be a\n// true block-level token with .tag=='label'\nfunction beginLabel(TokenConstructor) {\n\tvar token = new TokenConstructor('html_inline', '', 0);\n\ttoken.content = '<label>';\n\treturn token;\n}\n\nfunction endLabel(TokenConstructor) {\n\tvar token = new TokenConstructor('html_inline', '', 0);\n\ttoken.content = '</label>';\n\treturn token;\n}\n\nfunction afterLabel(content, id, TokenConstructor) {\n\tvar token = new TokenConstructor('html_inline', '', 0);\n\ttoken.content = '<label class=\"task-list-item-label\" for=\"' + id + '\">' + content + '</label>';\n\ttoken.attrs = [{for: id}];\n\treturn token;\n}\n\nfunction isInline(token) { return token.type === 'inline'; }\nfunction isParagraph(token) { return token.type === 'paragraph_open'; }\nfunction isListItem(token) { return token.type === 'list_item_open'; }\n\nfunction startsWithTodoMarkdown(token) {\n\t// leading whitespace in a list item is already trimmed off by markdown-it\n\treturn token.content.indexOf('[ ] ') === 0 || token.content.indexOf('[x] ') === 0 || token.content.indexOf('[X] ') === 0;\n}\n","/*\n * Copyright 2018 Google Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\n'use strict';\n\n(function(scope) {\n  if (scope['Proxy']) {\n    return;\n  }\n  scope.Proxy = require('./proxy.js')();\n  scope.Proxy['revocable'] = scope.Proxy.revocable;\n})(\n  ('undefined' !== typeof process &&\n    '[object process]' === {}.toString.call(process)) ||\n  ('undefined' !== typeof navigator && navigator.product === 'ReactNative')\n    ? global\n    : self\n);\n\n","/*\n * Copyright 2016 Google Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nmodule.exports = function proxyPolyfill() {\n  let lastRevokeFn = null;\n  let ProxyPolyfill;\n\n  /**\n   * @param {*} o\n   * @return {boolean} whether this is probably a (non-null) Object\n   */\n  function isObject(o) {\n    return o ? (typeof o === 'object' || typeof o === 'function') : false;\n  }\n\n  function validateProto(proto) {\n    if (proto !== null && !isObject(proto)) {\n      throw new TypeError('Object prototype may only be an Object or null: ' + proto);\n    }\n  }\n\n  const $Object = Object;\n\n  // Closure assumes that `{__proto__: null} instanceof Object` is always true, hence why we check against a different name.\n  const canCreateNullProtoObjects = Boolean($Object.create) || !({ __proto__: null } instanceof $Object);\n  const objectCreate =\n    $Object.create ||\n    (canCreateNullProtoObjects\n      ? function create(proto) {\n          validateProto(proto);\n          return { __proto__: proto };\n        }\n      : function create(proto) {\n          validateProto(proto);\n          if (proto === null) {\n            throw new SyntaxError('Native Object.create is required to create objects with null prototype');\n          }\n\n          // nb. cast to convince Closure compiler that this is a constructor\n          var T = /** @type {!Function} */ (function T() {});\n          T.prototype = proto;\n          return new T();\n        });\n\n  const noop = function() { return null; };\n\n  const getProto =\n    $Object.getPrototypeOf ||\n    ([].__proto__ === Array.prototype\n      ? function getPrototypeOf(O) {\n          // If O.[[Prototype]] === null, then the __proto__ accessor won't exist,\n          // as it's inherited from `Object.prototype`\n          const proto = O.__proto__;\n          return isObject(proto) ? proto : null;\n        }\n      : noop);\n\n  /**\n   * @constructor\n   * @param {!Object} target\n   * @param {{apply, construct, get, set}} handler\n   */\n  ProxyPolyfill = function(target, handler) {\n    const newTarget = this && this instanceof ProxyPolyfill ? this.constructor : undefined;\n    if (newTarget === undefined) {\n      throw new TypeError(\"Constructor Proxy requires 'new'\");\n    }\n\n    if (!isObject(target) || !isObject(handler)) {\n      throw new TypeError('Cannot create proxy with a non-object as target or handler');\n    }\n\n    // Construct revoke function, and set lastRevokeFn so that Proxy.revocable can steal it.\n    // The caller might get the wrong revoke function if a user replaces or wraps scope.Proxy\n    // to call itself, but that seems unlikely especially when using the polyfill.\n    let throwRevoked = function() {};\n    lastRevokeFn = function() {\n      /** @suppress {checkTypes} */\n      target = null;  // clear ref\n      throwRevoked = function(trap) {\n        throw new TypeError(`Cannot perform '${trap}' on a proxy that has been revoked`);\n      };\n    };\n    setTimeout(function() {\n      lastRevokeFn = null;\n    }, 0);\n\n    // Fail on unsupported traps: Chrome doesn't do this, but ensure that users of the polyfill\n    // are a bit more careful. Copy the internal parts of handler to prevent user changes.\n    const unsafeHandler = handler;\n    handler = { 'get': null, 'set': null, 'apply': null, 'construct': null };\n    for (let k in unsafeHandler) {\n      if (!(k in handler)) {\n        throw new TypeError(`Proxy polyfill does not support trap '${k}'`);\n      }\n      handler[k] = unsafeHandler[k];\n    }\n    if (typeof unsafeHandler === 'function') {\n      // Allow handler to be a function (which has an 'apply' method). This matches what is\n      // probably a bug in native versions. It treats the apply call as a trap to be configured.\n      handler.apply = unsafeHandler.apply.bind(unsafeHandler);\n    }\n\n    // Define proxy as an object that extends target.[[Prototype]],\n    // or a Function (if either it's callable, or apply is set).\n    const proto = getProto(target);  // can return null in old browsers\n    let proxy;\n    let isMethod = false;\n    let isArray = false;\n    if (typeof target === 'function') {\n      proxy = function ProxyPolyfill() {\n        const usingNew = (this && this.constructor === proxy);\n        const args = Array.prototype.slice.call(arguments);\n        throwRevoked(usingNew ? 'construct' : 'apply');\n\n        // TODO(samthor): Closure compiler doesn't know about 'construct', attempts to rename it.\n        if (usingNew && handler['construct']) {\n          return handler['construct'].call(this, target, args);\n        } else if (!usingNew && handler.apply) {\n          return handler['apply'](target, this, args);\n        }\n\n        // since the target was a function, fallback to calling it directly.\n        if (usingNew) {\n          // inspired by answers to https://stackoverflow.com/q/1606797\n          args.unshift(target);  // pass class as first arg to constructor, although irrelevant\n          // nb. cast to convince Closure compiler that this is a constructor\n          const f = /** @type {!Function} */ (target.bind.apply(target, args));\n          return new f();\n        }\n        return target.apply(this, args);\n      };\n      isMethod = true;\n    } else if (target instanceof Array) {\n      proxy = [];\n      isArray = true;\n    } else {\n      proxy = (canCreateNullProtoObjects || proto !== null) ? objectCreate(proto) : {};\n    }\n\n    // Create default getters/setters. Create different code paths as handler.get/handler.set can't\n    // change after creation.\n    const getter = handler.get ? function(prop) {\n      throwRevoked('get');\n      return handler.get(this, prop, proxy);\n    } : function(prop) {\n      throwRevoked('get');\n      return this[prop];\n    };\n    const setter = handler.set ? function(prop, value) {\n      throwRevoked('set');\n      const status = handler.set(this, prop, value, proxy);\n      // TODO(samthor): If the calling code is in strict mode, throw TypeError.\n      // if (!status) {\n        // It's (sometimes) possible to work this out, if this code isn't strict- try to load the\n        // callee, and if it's available, that code is non-strict. However, this isn't exhaustive.\n      // }\n    } : function(prop, value) {\n      throwRevoked('set');\n      this[prop] = value;\n    };\n\n    // Clone direct properties (i.e., not part of a prototype).\n    const propertyNames = $Object.getOwnPropertyNames(target);\n    const propertyMap = {};\n    propertyNames.forEach(function(prop) {\n      if ((isMethod || isArray) && prop in proxy) {\n        return;  // ignore properties already here, e.g. 'bind', 'prototype' etc\n      }\n      const real = $Object.getOwnPropertyDescriptor(target, prop);\n      const desc = {\n        enumerable: Boolean(real.enumerable),\n        get: getter.bind(target, prop),\n        set: setter.bind(target, prop),\n      };\n      $Object.defineProperty(proxy, prop, desc);\n      propertyMap[prop] = true;\n    });\n\n    // Set the prototype, or clone all prototype methods (always required if a getter is provided).\n    // TODO(samthor): We don't allow prototype methods to be set. It's (even more) awkward.\n    // An alternative here would be to _just_ clone methods to keep behavior consistent.\n    let prototypeOk = true;\n    if (isMethod || isArray) {\n      // Arrays and methods are special: above, we instantiate boring versions of these then swap\n      // our their prototype later. So we only need to use setPrototypeOf in these cases. Some old\n      // engines support `Object.getPrototypeOf` but not `Object.setPrototypeOf`.\n      const setProto =\n        $Object.setPrototypeOf ||\n        ([].__proto__ === Array.prototype\n          ? function setPrototypeOf(O, proto) {\n              validateProto(proto);\n              O.__proto__ = proto;\n              return O;\n            }\n          : noop);\n      if (!(proto && setProto(proxy, proto))) {\n        prototypeOk = false;\n      }\n    }\n    if (handler.get || !prototypeOk) {\n      for (let k in target) {\n        if (propertyMap[k]) {\n          continue;\n        }\n        $Object.defineProperty(proxy, k, { get: getter.bind(target, k) });\n      }\n    }\n\n    // The Proxy polyfill cannot handle adding new properties. Seal the target and proxy.\n    $Object.seal(target);\n    $Object.seal(proxy);\n\n    return proxy;  // nb. if isMethod is true, proxy != this\n  };\n\n  ProxyPolyfill.revocable = function(target, handler) {\n    const p = new ProxyPolyfill(target, handler);\n    return { 'proxy': p, 'revoke': lastRevokeFn };\n  };\n\n  return ProxyPolyfill;\n}\n","import markdownit from \"markdown-it\"\nimport {schema} from \"./schema\"\nimport {Mark} from \"prosemirror-model\"\n\nfunction maybeMerge(a, b) {\n  if (a.isText && b.isText && Mark.sameSet(a.marks, b.marks))\n    return a.withText(a.text + b.text)\n}\n\n// Object used to track the context of a running parse.\nclass MarkdownParseState {\n  constructor(schema, tokenHandlers) {\n    this.schema = schema\n    this.stack = [{type: schema.topNodeType, content: []}]\n    this.marks = Mark.none\n    this.tokenHandlers = tokenHandlers\n  }\n\n  top() {\n    return this.stack[this.stack.length - 1]\n  }\n\n  push(elt) {\n    if (this.stack.length) this.top().content.push(elt)\n  }\n\n  // : (string)\n  // Adds the given text to the current position in the document,\n  // using the current marks as styling.\n  addText(text) {\n    if (!text) return\n    let nodes = this.top().content, last = nodes[nodes.length - 1]\n    let node = this.schema.text(text, this.marks), merged\n    if (last && (merged = maybeMerge(last, node))) nodes[nodes.length - 1] = merged\n    else nodes.push(node)\n  }\n\n  // : (Mark)\n  // Adds the given mark to the set of active marks.\n  openMark(mark) {\n    this.marks = mark.addToSet(this.marks)\n  }\n\n  // : (Mark)\n  // Removes the given mark from the set of active marks.\n  closeMark(mark) {\n    this.marks = mark.removeFromSet(this.marks)\n  }\n\n  parseTokens(toks) {\n    for (let i = 0; i < toks.length; i++) {\n      let tok = toks[i]\n      let handler = this.tokenHandlers[tok.type]\n      if (!handler)\n        throw new Error(\"Token type `\" + tok.type + \"` not supported by Markdown parser\")\n      handler(this, tok)\n    }\n  }\n\n  // : (NodeType, ?Object, ?[Node]) → ?Node\n  // Add a node at the current position.\n  addNode(type, attrs, content) {\n    let node = type.createAndFill(attrs, content, this.marks)\n    if (!node) return null\n    this.push(node)\n    return node\n  }\n\n  // : (NodeType, ?Object)\n  // Wrap subsequent content in a node of the given type.\n  openNode(type, attrs) {\n    this.stack.push({type: type, attrs: attrs, content: []})\n  }\n\n  // : () → ?Node\n  // Close and return the node that is currently on top of the stack.\n  closeNode() {\n    if (this.marks.length) this.marks = Mark.none\n    let info = this.stack.pop()\n    return this.addNode(info.type, info.attrs, info.content)\n  }\n}\n\nfunction attrs(spec, token) {\n  if (spec.getAttrs) return spec.getAttrs(token)\n  // For backwards compatibility when `attrs` is a Function\n  else if (spec.attrs instanceof Function) return spec.attrs(token)\n  else return spec.attrs\n}\n\n// Code content is represented as a single token with a `content`\n// property in Markdown-it.\nfunction noCloseToken(spec, type) {\n  return spec.noCloseToken || type == \"code_inline\" || type == \"code_block\" || type == \"fence\"\n}\n\nfunction withoutTrailingNewline(str) {\n  return str[str.length - 1] == \"\\n\" ? str.slice(0, str.length - 1) : str\n}\n\nfunction noOp() {}\n\nfunction tokenHandlers(schema, tokens) {\n  let handlers = Object.create(null)\n  for (let type in tokens) {\n    let spec = tokens[type]\n    if (spec.block) {\n      let nodeType = schema.nodeType(spec.block)\n      if (noCloseToken(spec, type)) {\n        handlers[type] = (state, tok) => {\n          state.openNode(nodeType, attrs(spec, tok))\n          state.addText(withoutTrailingNewline(tok.content))\n          state.closeNode()\n        }\n      } else {\n        handlers[type + \"_open\"] = (state, tok) => state.openNode(nodeType, attrs(spec, tok))\n        handlers[type + \"_close\"] = state => state.closeNode()\n      }\n    } else if (spec.node) {\n      let nodeType = schema.nodeType(spec.node)\n      handlers[type] = (state, tok) => state.addNode(nodeType, attrs(spec, tok))\n    } else if (spec.mark) {\n      let markType = schema.marks[spec.mark]\n      if (noCloseToken(spec, type)) {\n        handlers[type] = (state, tok) => {\n          state.openMark(markType.create(attrs(spec, tok)))\n          state.addText(withoutTrailingNewline(tok.content))\n          state.closeMark(markType)\n        }\n      } else {\n        handlers[type + \"_open\"] = (state, tok) => state.openMark(markType.create(attrs(spec, tok)))\n        handlers[type + \"_close\"] = state => state.closeMark(markType)\n      }\n    } else if (spec.ignore) {\n      if (noCloseToken(spec, type)) {\n        handlers[type] = noOp\n      } else {\n        handlers[type + '_open'] = noOp\n        handlers[type + '_close'] = noOp\n      }\n    } else {\n      throw new RangeError(\"Unrecognized parsing spec \" + JSON.stringify(spec))\n    }\n  }\n\n  handlers.text = (state, tok) => state.addText(tok.content)\n  handlers.inline = (state, tok) => state.parseTokens(tok.children)\n  handlers.softbreak = handlers.softbreak || (state => state.addText(\"\\n\"))\n\n  return handlers\n}\n\n// ::- A configuration of a Markdown parser. Such a parser uses\n// [markdown-it](https://github.com/markdown-it/markdown-it) to\n// tokenize a file, and then runs the custom rules it is given over\n// the tokens to create a ProseMirror document tree.\nexport class MarkdownParser {\n  // :: (Schema, MarkdownIt, Object)\n  // Create a parser with the given configuration. You can configure\n  // the markdown-it parser to parse the dialect you want, and provide\n  // a description of the ProseMirror entities those tokens map to in\n  // the `tokens` object, which maps token names to descriptions of\n  // what to do with them. Such a description is an object, and may\n  // have the following properties:\n  //\n  // **`node`**`: ?string`\n  //   : This token maps to a single node, whose type can be looked up\n  //     in the schema under the given name. Exactly one of `node`,\n  //     `block`, or `mark` must be set.\n  //\n  // **`block`**`: ?string`\n  //   : This token (unless `noCloseToken` is true) comes in `_open`\n  //     and `_close` variants (which are appended to the base token\n  //     name provides a the object property), and wraps a block of\n  //     content. The block should be wrapped in a node of the type\n  //     named to by the property's value. If the token does not have\n  //     `_open` or `_close`, use the `noCloseToken` option.\n  //\n  // **`mark`**`: ?string`\n  //   : This token (again, unless `noCloseToken` is true) also comes\n  //     in `_open` and `_close` variants, but should add a mark\n  //     (named by the value) to its content, rather than wrapping it\n  //     in a node.\n  //\n  // **`attrs`**`: ?Object`\n  //   : Attributes for the node or mark. When `getAttrs` is provided,\n  //     it takes precedence.\n  //\n  // **`getAttrs`**`: ?(MarkdownToken) → Object`\n  //   : A function used to compute the attributes for the node or mark\n  //     that takes a [markdown-it\n  //     token](https://markdown-it.github.io/markdown-it/#Token) and\n  //     returns an attribute object.\n  //\n  // **`noCloseToken`**`: ?boolean`\n  //   : Indicates that the [markdown-it\n  //     token](https://markdown-it.github.io/markdown-it/#Token) has\n  //     no `_open` or `_close` for the nodes. This defaults to `true`\n  //     for `code_inline`, `code_block` and `fence`.\n  //\n  // **`ignore`**`: ?bool`\n  //   : When true, ignore content for the matched token.\n  constructor(schema, tokenizer, tokens) {\n    // :: Object The value of the `tokens` object used to construct\n    // this parser. Can be useful to copy and modify to base other\n    // parsers on.\n    this.tokens = tokens\n    this.schema = schema\n    this.tokenizer = tokenizer\n    this.tokenHandlers = tokenHandlers(schema, tokens)\n  }\n\n  // :: (string) → Node\n  // Parse a string as [CommonMark](http://commonmark.org/) markup,\n  // and create a ProseMirror document as prescribed by this parser's\n  // rules.\n  parse(text) {\n    let state = new MarkdownParseState(this.schema, this.tokenHandlers), doc\n    state.parseTokens(this.tokenizer.parse(text, {}))\n    do { doc = state.closeNode() } while (state.stack.length)\n    return doc\n  }\n}\n\n// :: MarkdownParser\n// A parser parsing unextended [CommonMark](http://commonmark.org/),\n// without inline HTML, and producing a document in the basic schema.\nexport const defaultMarkdownParser = new MarkdownParser(schema, markdownit(\"commonmark\", {html: false}), {\n  blockquote: {block: \"blockquote\"},\n  paragraph: {block: \"paragraph\"},\n  list_item: {block: \"list_item\"},\n  bullet_list: {block: \"bullet_list\"},\n  ordered_list: {block: \"ordered_list\", getAttrs: tok => ({order: +tok.attrGet(\"start\") || 1})},\n  heading: {block: \"heading\", getAttrs: tok => ({level: +tok.tag.slice(1)})},\n  code_block: {block: \"code_block\", noCloseToken: true},\n  fence: {block: \"code_block\", getAttrs: tok => ({params: tok.info || \"\"}), noCloseToken: true},\n  hr: {node: \"horizontal_rule\"},\n  image: {node: \"image\", getAttrs: tok => ({\n    src: tok.attrGet(\"src\"),\n    title: tok.attrGet(\"title\") || null,\n    alt: tok.children[0] && tok.children[0].content || null\n  })},\n  hardbreak: {node: \"hard_break\"},\n\n  em: {mark: \"em\"},\n  strong: {mark: \"strong\"},\n  link: {mark: \"link\", getAttrs: tok => ({\n    href: tok.attrGet(\"href\"),\n    title: tok.attrGet(\"title\") || null\n  })},\n  code_inline: {mark: \"code\", noCloseToken: true}\n})\n","// ::- A specification for serializing a ProseMirror document as\n// Markdown/CommonMark text.\nexport class MarkdownSerializer {\n  // :: (Object<(state: MarkdownSerializerState, node: Node, parent: Node, index: number)>, Object)\n  // Construct a serializer with the given configuration. The `nodes`\n  // object should map node names in a given schema to function that\n  // take a serializer state and such a node, and serialize the node.\n  //\n  // The `marks` object should hold objects with `open` and `close`\n  // properties, which hold the strings that should appear before and\n  // after a piece of text marked that way, either directly or as a\n  // function that takes a serializer state and a mark, and returns a\n  // string. `open` and `close` can also be functions, which will be\n  // called as\n  //\n  //     (state: MarkdownSerializerState, mark: Mark,\n  //      parent: Fragment, index: number) → string\n  //\n  // Where `parent` and `index` allow you to inspect the mark's\n  // context to see which nodes it applies to.\n  //\n  // Mark information objects can also have a `mixable` property\n  // which, when `true`, indicates that the order in which the mark's\n  // opening and closing syntax appears relative to other mixable\n  // marks can be varied. (For example, you can say `**a *b***` and\n  // `*a **b***`, but not `` `a *b*` ``.)\n  //\n  // To disable character escaping in a mark, you can give it an\n  // `escape` property of `false`. Such a mark has to have the highest\n  // precedence (must always be the innermost mark).\n  //\n  // The `expelEnclosingWhitespace` mark property causes the\n  // serializer to move enclosing whitespace from inside the marks to\n  // outside the marks. This is necessary for emphasis marks as\n  // CommonMark does not permit enclosing whitespace inside emphasis\n  // marks, see: http://spec.commonmark.org/0.26/#example-330\n  constructor(nodes, marks) {\n    // :: Object<(MarkdownSerializerState, Node)> The node serializer\n    // functions for this serializer.\n    this.nodes = nodes\n    // :: Object The mark serializer info.\n    this.marks = marks\n  }\n\n  // :: (Node, ?Object) → string\n  // Serialize the content of the given node to\n  // [CommonMark](http://commonmark.org/).\n  serialize(content, options) {\n    let state = new MarkdownSerializerState(this.nodes, this.marks, options)\n    state.renderContent(content)\n    return state.out\n  }\n}\n\n// :: MarkdownSerializer\n// A serializer for the [basic schema](#schema).\nexport const defaultMarkdownSerializer = new MarkdownSerializer({\n  blockquote(state, node) {\n    state.wrapBlock(\"> \", null, node, () => state.renderContent(node))\n  },\n  code_block(state, node) {\n    state.write(\"```\" + (node.attrs.params || \"\") + \"\\n\")\n    state.text(node.textContent, false)\n    state.ensureNewLine()\n    state.write(\"```\")\n    state.closeBlock(node)\n  },\n  heading(state, node) {\n    state.write(state.repeat(\"#\", node.attrs.level) + \" \")\n    state.renderInline(node)\n    state.closeBlock(node)\n  },\n  horizontal_rule(state, node) {\n    state.write(node.attrs.markup || \"---\")\n    state.closeBlock(node)\n  },\n  bullet_list(state, node) {\n    state.renderList(node, \"  \", () => (node.attrs.bullet || \"*\") + \" \")\n  },\n  ordered_list(state, node) {\n    let start = node.attrs.order || 1\n    let maxW = String(start + node.childCount - 1).length\n    let space = state.repeat(\" \", maxW + 2)\n    state.renderList(node, space, i => {\n      let nStr = String(start + i)\n      return state.repeat(\" \", maxW - nStr.length) + nStr + \". \"\n    })\n  },\n  list_item(state, node) {\n    state.renderContent(node)\n  },\n  paragraph(state, node) {\n    state.renderInline(node)\n    state.closeBlock(node)\n  },\n\n  image(state, node) {\n    state.write(\"![\" + state.esc(node.attrs.alt || \"\") + \"](\" + state.esc(node.attrs.src) +\n                (node.attrs.title ? \" \" + state.quote(node.attrs.title) : \"\") + \")\")\n  },\n  hard_break(state, node, parent, index) {\n    for (let i = index + 1; i < parent.childCount; i++)\n      if (parent.child(i).type != node.type) {\n        state.write(\"\\\\\\n\")\n        return\n      }\n  },\n  text(state, node) {\n    state.text(node.text)\n  }\n}, {\n  em: {open: \"*\", close: \"*\", mixable: true, expelEnclosingWhitespace: true},\n  strong: {open: \"**\", close: \"**\", mixable: true, expelEnclosingWhitespace: true},\n  link: {\n    open(_state, mark, parent, index) {\n      return isPlainURL(mark, parent, index, 1) ? \"<\" : \"[\"\n    },\n    close(state, mark, parent, index) {\n      return isPlainURL(mark, parent, index, -1) ? \">\"\n        : \"](\" + state.esc(mark.attrs.href) + (mark.attrs.title ? \" \" + state.quote(mark.attrs.title) : \"\") + \")\"\n    }\n  },\n  code: {open(_state, _mark, parent, index) { return backticksFor(parent.child(index), -1) },\n         close(_state, _mark, parent, index) { return backticksFor(parent.child(index - 1), 1) },\n         escape: false}\n})\n\nfunction backticksFor(node, side) {\n  let ticks = /`+/g, m, len = 0\n  if (node.isText) while (m = ticks.exec(node.text)) len = Math.max(len, m[0].length)\n  let result = len > 0 && side > 0 ? \" `\" : \"`\"\n  for (let i = 0; i < len; i++) result += \"`\"\n  if (len > 0 && side < 0) result += \" \"\n  return result\n}\n\nfunction isPlainURL(link, parent, index, side) {\n  if (link.attrs.title || !/^\\w+:/.test(link.attrs.href)) return false\n  let content = parent.child(index + (side < 0 ? -1 : 0))\n  if (!content.isText || content.text != link.attrs.href || content.marks[content.marks.length - 1] != link) return false\n  if (index == (side < 0 ? 1 : parent.childCount - 1)) return true\n  let next = parent.child(index + (side < 0 ? -2 : 1))\n  return !link.isInSet(next.marks)\n}\n\n// ::- This is an object used to track state and expose\n// methods related to markdown serialization. Instances are passed to\n// node and mark serialization methods (see `toMarkdown`).\nexport class MarkdownSerializerState {\n  constructor(nodes, marks, options) {\n    this.nodes = nodes\n    this.marks = marks\n    this.delim = this.out = \"\"\n    this.closed = false\n    this.inTightList = false\n    // :: Object\n    // The options passed to the serializer.\n    //   tightLists:: ?bool\n    //   Whether to render lists in a tight style. This can be overridden\n    //   on a node level by specifying a tight attribute on the node.\n    //   Defaults to false.\n    this.options = options || {}\n    if (typeof this.options.tightLists == \"undefined\")\n      this.options.tightLists = false\n  }\n\n  flushClose(size) {\n    if (this.closed) {\n      if (!this.atBlank()) this.out += \"\\n\"\n      if (size == null) size = 2\n      if (size > 1) {\n        let delimMin = this.delim\n        let trim = /\\s+$/.exec(delimMin)\n        if (trim) delimMin = delimMin.slice(0, delimMin.length - trim[0].length)\n        for (let i = 1; i < size; i++)\n          this.out += delimMin + \"\\n\"\n      }\n      this.closed = false\n    }\n  }\n\n  // :: (string, ?string, Node, ())\n  // Render a block, prefixing each line with `delim`, and the first\n  // line in `firstDelim`. `node` should be the node that is closed at\n  // the end of the block, and `f` is a function that renders the\n  // content of the block.\n  wrapBlock(delim, firstDelim, node, f) {\n    let old = this.delim\n    this.write(firstDelim || delim)\n    this.delim += delim\n    f()\n    this.delim = old\n    this.closeBlock(node)\n  }\n\n  atBlank() {\n    return /(^|\\n)$/.test(this.out)\n  }\n\n  // :: ()\n  // Ensure the current content ends with a newline.\n  ensureNewLine() {\n    if (!this.atBlank()) this.out += \"\\n\"\n  }\n\n  // :: (?string)\n  // Prepare the state for writing output (closing closed paragraphs,\n  // adding delimiters, and so on), and then optionally add content\n  // (unescaped) to the output.\n  write(content) {\n    this.flushClose()\n    if (this.delim && this.atBlank())\n      this.out += this.delim\n    if (content) this.out += content\n  }\n\n  // :: (Node)\n  // Close the block for the given node.\n  closeBlock(node) {\n    this.closed = node\n  }\n\n  // :: (string, ?bool)\n  // Add the given text to the document. When escape is not `false`,\n  // it will be escaped.\n  text(text, escape) {\n    let lines = text.split(\"\\n\")\n    for (let i = 0; i < lines.length; i++) {\n      var startOfLine = this.atBlank() || this.closed\n      this.write()\n      this.out += escape !== false ? this.esc(lines[i], startOfLine) : lines[i]\n      if (i != lines.length - 1) this.out += \"\\n\"\n    }\n  }\n\n  // :: (Node)\n  // Render the given node as a block.\n  render(node, parent, index) {\n    if (typeof parent == \"number\") throw new Error(\"!\")\n    this.nodes[node.type.name](this, node, parent, index)\n  }\n\n  // :: (Node)\n  // Render the contents of `parent` as block nodes.\n  renderContent(parent) {\n    parent.forEach((node, _, i) => this.render(node, parent, i))\n  }\n\n  // :: (Node)\n  // Render the contents of `parent` as inline content.\n  renderInline(parent) {\n    let active = [], trailing = \"\"\n    let progress = (node, _, index) => {\n      let marks = node ? node.marks : []\n\n      // Remove marks from `hard_break` that are the last node inside\n      // that mark to prevent parser edge cases with new lines just\n      // before closing marks.\n      // (FIXME it'd be nice if we had a schema-agnostic way to\n      // identify nodes that serialize as hard breaks)\n      if (node && node.type.name === \"hard_break\")\n        marks = marks.filter(m => {\n          if (index + 1 == parent.childCount) return false\n          let next = parent.child(index + 1)\n          return m.isInSet(next.marks) && (!next.isText || /\\S/.test(next.text))\n        })\n\n      let leading = trailing\n      trailing = \"\"\n      // If whitespace has to be expelled from the node, adjust\n      // leading and trailing accordingly.\n      if (node && node.isText && marks.some(mark => {\n        let info = this.marks[mark.type.name]\n        return info && info.expelEnclosingWhitespace\n      })) {\n        let [_, lead, inner, trail] = /^(\\s*)(.*?)(\\s*)$/m.exec(node.text)\n        leading += lead\n        trailing = trail\n        if (lead || trail) {\n          node = inner ? node.withText(inner) : null\n          if (!node) marks = active\n        }\n      }\n\n      let inner = marks.length && marks[marks.length - 1], noEsc = inner && this.marks[inner.type.name].escape === false\n      let len = marks.length - (noEsc ? 1 : 0)\n\n      // Try to reorder 'mixable' marks, such as em and strong, which\n      // in Markdown may be opened and closed in different order, so\n      // that order of the marks for the token matches the order in\n      // active.\n      outer: for (let i = 0; i < len; i++) {\n        let mark = marks[i]\n        if (!this.marks[mark.type.name].mixable) break\n        for (let j = 0; j < active.length; j++) {\n          let other = active[j]\n          if (!this.marks[other.type.name].mixable) break\n          if (mark.eq(other)) {\n            if (i > j)\n              marks = marks.slice(0, j).concat(mark).concat(marks.slice(j, i)).concat(marks.slice(i + 1, len))\n            else if (j > i)\n              marks = marks.slice(0, i).concat(marks.slice(i + 1, j)).concat(mark).concat(marks.slice(j, len))\n            continue outer\n          }\n        }\n      }\n\n      // Find the prefix of the mark set that didn't change\n      let keep = 0\n      while (keep < Math.min(active.length, len) && marks[keep].eq(active[keep])) ++keep\n\n      // Close the marks that need to be closed\n      while (keep < active.length)\n        this.text(this.markString(active.pop(), false, parent, index), false)\n\n      // Output any previously expelled trailing whitespace outside the marks\n      if (leading) this.text(leading)\n\n      // Open the marks that need to be opened\n      if (node) {\n        while (active.length < len) {\n          let add = marks[active.length]\n          active.push(add)\n          this.text(this.markString(add, true, parent, index), false)\n        }\n\n        // Render the node. Special case code marks, since their content\n        // may not be escaped.\n        if (noEsc && node.isText)\n          this.text(this.markString(inner, true, parent, index) + node.text +\n                    this.markString(inner, false, parent, index + 1), false)\n        else\n          this.render(node, parent, index)\n      }\n    }\n    parent.forEach(progress)\n    progress(null, null, parent.childCount)\n  }\n\n  // :: (Node, string, (number) → string)\n  // Render a node's content as a list. `delim` should be the extra\n  // indentation added to all lines except the first in an item,\n  // `firstDelim` is a function going from an item index to a\n  // delimiter for the first line of the item.\n  renderList(node, delim, firstDelim) {\n    if (this.closed && this.closed.type == node.type)\n      this.flushClose(3)\n    else if (this.inTightList)\n      this.flushClose(1)\n\n    let isTight = typeof node.attrs.tight != \"undefined\" ? node.attrs.tight : this.options.tightLists\n    let prevTight = this.inTightList\n    this.inTightList = isTight\n    node.forEach((child, _, i) => {\n      if (i && isTight) this.flushClose(1)\n      this.wrapBlock(delim, firstDelim(i), node, () => this.render(child, node, i))\n    })\n    this.inTightList = prevTight\n  }\n\n  // :: (string, ?bool) → string\n  // Escape the given string so that it can safely appear in Markdown\n  // content. If `startOfLine` is true, also escape characters that\n  // has special meaning only at the start of the line.\n  esc(str, startOfLine) {\n    str = str.replace(/[`*\\\\~\\[\\]]/g, \"\\\\$&\")\n    if (startOfLine) str = str.replace(/^[:#\\-*+]/, \"\\\\$&\").replace(/^(\\d+)\\./, \"$1\\\\.\")\n    return str\n  }\n\n  quote(str) {\n    var wrap = str.indexOf('\"') == -1 ? '\"\"' : str.indexOf(\"'\") == -1 ? \"''\" : \"()\"\n    return wrap[0] + str + wrap[1]\n  }\n\n  // :: (string, number) → string\n  // Repeat the given string `n` times.\n  repeat(str, n) {\n    let out = \"\"\n    for (let i = 0; i < n; i++) out += str\n    return out\n  }\n\n  // : (Mark, bool, string?) → string\n  // Get the markdown string for a given opening or closing mark.\n  markString(mark, open, parent, index) {\n    let info = this.marks[mark.type.name]\n    let value = open ? info.open : info.close\n    return typeof value == \"string\" ? value : value(this, mark, parent, index)\n  }\n\n  // :: (string) → { leading: ?string, trailing: ?string }\n  // Get leading and trailing whitespace from a string. Values of\n  // leading or trailing property of the return object will be undefined\n  // if there is no match.\n  getEnclosingWhitespace(text) {\n    return {\n      leading: (text.match(/^(\\s+)/) || [])[0],\n      trailing: (text.match(/(\\s+)$/) || [])[0]\n    }\n  }\n}\n"],"sourceRoot":""}